diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 000000000..dfe077042
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,2 @@
+# Auto detect text files and perform LF normalization
+* text=auto
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 000000000..a68e5b575
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,30 @@
+# Gradle files
+.gradle/
+build/
+
+# Local configuration file (sdk path, etc)
+local.properties
+
+# Log/OS Files
+*.log
+
+# Android Studio generated files and folders
+captures/
+.externalNativeBuild/
+.cxx/
+*.apk
+output.json
+
+# IntelliJ
+*.iml
+.idea/
+
+# Keystore files
+*.jks
+*.keystore
+
+# Google Services (e.g. APIs or Firebase)
+google-services.json
+
+# Android Profiling
+*.hprof
diff --git a/FCL/.gitignore b/FCL/.gitignore
new file mode 100644
index 000000000..42afabfd2
--- /dev/null
+++ b/FCL/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/FCL/build.gradle b/FCL/build.gradle
new file mode 100644
index 000000000..17d513c1a
--- /dev/null
+++ b/FCL/build.gradle
@@ -0,0 +1,42 @@
+plugins {
+ id 'com.android.application'
+}
+
+android {
+ namespace 'com.tungsten.fcl'
+ compileSdk 32
+
+ defaultConfig {
+ applicationId "com.tungsten.fcl"
+ minSdk 23
+ targetSdk 32
+ versionCode 1
+ versionName "1.0"
+
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+}
+
+dependencies {
+ implementation fileTree(dir: 'libs', include: ['*.jar'])
+ implementation project(path: ':FCLCore')
+ implementation project(path: ':FCLauncher')
+ implementation 'cat.ereza:customactivityoncrash:2.4.0'
+ implementation 'androidx.appcompat:appcompat:1.5.1'
+ implementation 'com.google.android.material:material:1.6.1'
+ implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
+ testImplementation 'junit:junit:4.13.2'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.3'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
+}
\ No newline at end of file
diff --git a/FCL/proguard-rules.pro b/FCL/proguard-rules.pro
new file mode 100644
index 000000000..481bb4348
--- /dev/null
+++ b/FCL/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/FCL/src/androidTest/java/com/tungsten/fcl/ExampleInstrumentedTest.java b/FCL/src/androidTest/java/com/tungsten/fcl/ExampleInstrumentedTest.java
new file mode 100644
index 000000000..eee49c7c5
--- /dev/null
+++ b/FCL/src/androidTest/java/com/tungsten/fcl/ExampleInstrumentedTest.java
@@ -0,0 +1,26 @@
+package com.tungsten.fcl;
+
+import android.content.Context;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see Testing documentation
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
+ assertEquals("com.tungsten.fcl", appContext.getPackageName());
+ }
+}
\ No newline at end of file
diff --git a/FCL/src/main/AndroidManifest.xml b/FCL/src/main/AndroidManifest.xml
new file mode 100644
index 000000000..62cf2ba1b
--- /dev/null
+++ b/FCL/src/main/AndroidManifest.xml
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/FCL/src/main/assets/app_runtime/lwjgl2/lwjgl.jar b/FCL/src/main/assets/app_runtime/lwjgl2/lwjgl.jar
new file mode 100644
index 000000000..9a75819a9
Binary files /dev/null and b/FCL/src/main/assets/app_runtime/lwjgl2/lwjgl.jar differ
diff --git a/FCL/src/main/assets/app_runtime/lwjgl2/lwjgl_util.jar b/FCL/src/main/assets/app_runtime/lwjgl2/lwjgl_util.jar
new file mode 100644
index 000000000..18fd51315
Binary files /dev/null and b/FCL/src/main/assets/app_runtime/lwjgl2/lwjgl_util.jar differ
diff --git a/FCL/src/main/assets/app_runtime/lwjgl3/lwjgl-glfw.jar b/FCL/src/main/assets/app_runtime/lwjgl3/lwjgl-glfw.jar
new file mode 100644
index 000000000..af15ac89c
Binary files /dev/null and b/FCL/src/main/assets/app_runtime/lwjgl3/lwjgl-glfw.jar differ
diff --git a/FCL/src/main/assets/app_runtime/lwjgl3/lwjgl-jemalloc.jar b/FCL/src/main/assets/app_runtime/lwjgl3/lwjgl-jemalloc.jar
new file mode 100644
index 000000000..2df695e45
Binary files /dev/null and b/FCL/src/main/assets/app_runtime/lwjgl3/lwjgl-jemalloc.jar differ
diff --git a/FCL/src/main/assets/app_runtime/lwjgl3/lwjgl-openal.jar b/FCL/src/main/assets/app_runtime/lwjgl3/lwjgl-openal.jar
new file mode 100644
index 000000000..8132408af
Binary files /dev/null and b/FCL/src/main/assets/app_runtime/lwjgl3/lwjgl-openal.jar differ
diff --git a/FCL/src/main/assets/app_runtime/lwjgl3/lwjgl-opengl.jar b/FCL/src/main/assets/app_runtime/lwjgl3/lwjgl-opengl.jar
new file mode 100644
index 000000000..c4d228cd5
Binary files /dev/null and b/FCL/src/main/assets/app_runtime/lwjgl3/lwjgl-opengl.jar differ
diff --git a/FCL/src/main/assets/app_runtime/lwjgl3/lwjgl-stb.jar b/FCL/src/main/assets/app_runtime/lwjgl3/lwjgl-stb.jar
new file mode 100644
index 000000000..1cd2966d5
Binary files /dev/null and b/FCL/src/main/assets/app_runtime/lwjgl3/lwjgl-stb.jar differ
diff --git a/FCL/src/main/assets/app_runtime/lwjgl3/lwjgl-tinyfd.jar b/FCL/src/main/assets/app_runtime/lwjgl3/lwjgl-tinyfd.jar
new file mode 100644
index 000000000..6788744e5
Binary files /dev/null and b/FCL/src/main/assets/app_runtime/lwjgl3/lwjgl-tinyfd.jar differ
diff --git a/FCL/src/main/assets/app_runtime/lwjgl3/lwjgl.jar b/FCL/src/main/assets/app_runtime/lwjgl3/lwjgl.jar
new file mode 100644
index 000000000..907795794
Binary files /dev/null and b/FCL/src/main/assets/app_runtime/lwjgl3/lwjgl.jar differ
diff --git a/FCL/src/main/assets/java/ASSEMBLY_EXCEPTION b/FCL/src/main/assets/java/ASSEMBLY_EXCEPTION
new file mode 100644
index 000000000..065b8d902
--- /dev/null
+++ b/FCL/src/main/assets/java/ASSEMBLY_EXCEPTION
@@ -0,0 +1,27 @@
+
+OPENJDK ASSEMBLY EXCEPTION
+
+The OpenJDK source code made available by Oracle America, Inc. (Oracle) at
+openjdk.java.net ("OpenJDK Code") is distributed under the terms of the GNU
+General Public License version 2
+only ("GPL2"), with the following clarification and special exception.
+
+ Linking this OpenJDK Code statically or dynamically with other code
+ is making a combined work based on this library. Thus, the terms
+ and conditions of GPL2 cover the whole combination.
+
+ As a special exception, Oracle gives you permission to link this
+ OpenJDK Code with certain code licensed by Oracle as indicated at
+ http://openjdk.java.net/legal/exception-modules-2007-05-08.html
+ ("Designated Exception Modules") to produce an executable,
+ regardless of the license terms of the Designated Exception Modules,
+ and to copy and distribute the resulting executable under GPL2,
+ provided that the Designated Exception Modules continue to be
+ governed by the licenses under which they were offered by Oracle.
+
+As such, it allows licensees and sublicensees of Oracle's GPL2 OpenJDK Code
+to build an executable that includes those portions of necessary code that
+Oracle could not provide under GPL2 (or that Oracle has provided under GPL2
+with the Classpath exception). If you modify or add to the OpenJDK code,
+that new GPL2 code may still be combined with Designated Exception Modules
+if the new code is made subject to this exception by its copyright holder.
diff --git a/FCL/src/main/assets/java/LICENSE b/FCL/src/main/assets/java/LICENSE
new file mode 100644
index 000000000..8b400c7ab
--- /dev/null
+++ b/FCL/src/main/assets/java/LICENSE
@@ -0,0 +1,347 @@
+The GNU General Public License (GPL)
+
+Version 2, June 1991
+
+Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+Everyone is permitted to copy and distribute verbatim copies of this license
+document, but changing it is not allowed.
+
+Preamble
+
+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.
+
+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.
+
+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.
+
+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.
+
+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.
+
+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.
+
+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.
+
+The precise terms and conditions for copying, distribution and modification
+follow.
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+0. 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".
+
+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.
+
+1. 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.
+
+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.
+
+2. 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:
+
+ a) You must cause the modified files to carry prominent notices stating
+ that you changed the files and the date of any change.
+
+ b) 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.
+
+ c) 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.)
+
+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.
+
+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.
+
+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.
+
+3. 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:
+
+ a) 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,
+
+ b) 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,
+
+ c) 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.)
+
+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.
+
+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.
+
+4. 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.
+
+5. 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.
+
+6. 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.
+
+7. 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.
+
+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.
+
+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.
+
+This section is intended to make thoroughly clear what is believed to be a
+consequence of the rest of this License.
+
+8. 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.
+
+9. 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.
+
+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.
+
+10. 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.
+
+NO WARRANTY
+
+11. 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.
+
+12. 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.
+
+END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Programs
+
+If you develop a new program, and you want it to be of the greatest possible
+use to the public, the best way to achieve this is to make it free software
+which everyone can redistribute and change under these terms.
+
+To do so, attach the following notices to the program. It is safest to attach
+them to the start of each source file to most effectively convey the exclusion
+of warranty; and each file should have at least the "copyright" line and a
+pointer to where the full notice is found.
+
+ One line to give the program's name and a brief idea of what it does.
+
+ Copyright (C)
+
+ 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.
+
+ 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.
+
+ 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.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this when it
+starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author Gnomovision comes
+ with ABSOLUTELY NO WARRANTY; for details type 'show w'. This is free
+ software, and you are welcome to redistribute it under certain conditions;
+ type 'show c' for details.
+
+The hypothetical commands 'show w' and 'show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may be
+called something other than 'show w' and 'show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your school,
+if any, to sign a "copyright disclaimer" for the program, if necessary. Here
+is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ 'Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ signature of Ty Coon, 1 April 1989
+
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General Public
+License instead of this License.
+
+
+"CLASSPATH" EXCEPTION TO THE GPL
+
+Certain source files distributed by Oracle America and/or its affiliates are
+subject to the following clarification and special exception to the GPL, but
+only where Oracle has expressly included in the particular source file's header
+the words "Oracle designates this particular file as subject to the "Classpath"
+exception as provided by Oracle in the LICENSE file that accompanied this code."
+
+ Linking this library statically or dynamically with other modules is making
+ a combined work based on this library. Thus, the terms and conditions of
+ the GNU General Public License cover the whole combination.
+
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent modules,
+ and to copy and distribute the resulting executable under terms of your
+ choice, provided that you also meet, for each linked independent module,
+ the terms and conditions of the license of that module. An independent
+ module is a module which is not derived from or based on this library. If
+ you modify this library, you may extend this exception to your version of
+ the library, but you are not obligated to do so. If you do not wish to do
+ so, delete this exception statement from your version.
diff --git a/FCL/src/main/assets/java/THIRD_PARTY_README b/FCL/src/main/assets/java/THIRD_PARTY_README
new file mode 100644
index 000000000..a00e41860
--- /dev/null
+++ b/FCL/src/main/assets/java/THIRD_PARTY_README
@@ -0,0 +1,3282 @@
+DO NOT TRANSLATE OR LOCALIZE.
+-----------------------------
+
+%% This notice is provided with respect to ASM Bytecode Manipulation
+Framework v5.0.3, which may be included with JRE 8, and JDK 8, and
+OpenJDK 8.
+
+--- begin of LICENSE ---
+
+Copyright (c) 2000-2011 France Télécom
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+3. Neither the name of the copyright holders nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGE.
+
+--- end of LICENSE ---
+
+--------------------------------------------------------------------------------
+
+%% This notice is provided with respect to BSDiff v4.3, which may be
+included with JRE 8, JDK 8, and OpenJDK 8.
+
+--- begin of LICENSE ---
+
+Copyright 2003-2005 Colin Percival
+All rights reserved
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted providing that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+--- end of LICENSE ---
+
+-------------------------------------------------------------------------------
+
+%% This notice is provided with respect to CodeViewer 1.0, which may be
+included with JDK 8.
+
+--- begin of LICENSE ---
+
+Copyright 1999 by CoolServlets.com.
+
+Any errors or suggested improvements to this class can be reported as
+instructed on CoolServlets.com. We hope you enjoy this program... your
+comments will encourage further development! This software is distributed
+under the terms of the BSD License. Redistribution and use in source and
+binary forms, with or without modification, are permitted provided that the
+following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+Neither name of CoolServlets.com nor the names of its contributors may be
+used to endorse or promote products derived from this software without
+specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY COOLSERVLETS.COM AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+
+
+--- end of LICENSE ---
+
+-------------------------------------------------------------------------------
+
+%% This notice is provided with respect to Cryptix AES 3.2.0, which may be
+included with JRE 8, JDK 8, and OpenJDK 8.
+
+--- begin of LICENSE ---
+
+Cryptix General License
+
+Copyright (c) 1995-2005 The Cryptix Foundation Limited.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ 1. Redistributions of source code must retain the copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE CRYPTIX FOUNDATION LIMITED AND
+CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE CRYPTIX FOUNDATION LIMITED OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+--- end of LICENSE ---
+
+-------------------------------------------------------------------------------
+
+%% This notice is provided with respect to CUP Parser Generator for
+Java 0.11b, which may be included with JRE 8, JDK 8, and OpenJDK 8.
+
+--- begin of LICENSE ---
+
+Copyright 1996-2015 by Scott Hudson, Frank Flannery, C. Scott Ananian, Michael Petter
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted, provided
+that the above copyright notice appear in all copies and that both the
+copyright notice and this permission notice and warranty disclaimer appear in
+supporting documentation, and that the names of the authors or their
+employers not be used in advertising or publicity pertaining to distribution of
+the software without specific, written prior permission.
+
+The authors and their employers disclaim all warranties with regard to
+this software, including all implied warranties of merchantability and fitness.
+In no event shall the authors or their employers be liable for any special,
+indirect or consequential damages or any damages whatsoever resulting from
+loss of use, data or profits, whether in an action of contract, negligence or
+other tortious action, arising out of or in connection with the use or
+performance of this software.
+
+--- end of LICENSE ---
+
+-------------------------------------------------------------------------------
+
+%% This notice is provided with respect to DejaVu fonts v2.34, which may be
+included with JRE 8, and JDK 8, and OpenJDK 8.
+
+--- begin of LICENSE ---
+
+Fonts are (c) Bitstream (see below). DejaVu changes are in public domain.
+Glyphs imported from Arev fonts are (c) Tavmjong Bah (see below)
+
+
+Bitstream Vera Fonts Copyright
+------------------------------
+
+Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is
+a trademark of Bitstream, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of the fonts accompanying this license ("Fonts") and associated
+documentation files (the "Font Software"), to reproduce and distribute the
+Font Software, including without limitation the rights to use, copy, merge,
+publish, distribute, and/or sell copies of the Font Software, and to permit
+persons to whom the Font Software is furnished to do so, subject to the
+following conditions:
+
+The above copyright and trademark notices and this permission notice shall
+be included in all copies of one or more of the Font Software typefaces.
+
+The Font Software may be modified, altered, or added to, and in particular
+the designs of glyphs or characters in the Fonts may be modified and
+additional glyphs or characters may be added to the Fonts, only if the fonts
+are renamed to names not containing either the words "Bitstream" or the word
+"Vera".
+
+This License becomes null and void to the extent applicable to Fonts or Font
+Software that has been modified and is distributed under the "Bitstream
+Vera" names.
+
+The Font Software may be sold as part of a larger software package but no
+copy of one or more of the Font Software typefaces may be sold by itself.
+
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT,
+TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME
+FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING
+ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE
+FONT SOFTWARE.
+
+Except as contained in this notice, the names of Gnome, the Gnome
+Foundation, and Bitstream Inc., shall not be used in advertising or
+otherwise to promote the sale, use or other dealings in this Font Software
+without prior written authorization from the Gnome Foundation or Bitstream
+Inc., respectively. For further information, contact: fonts at gnome dot
+org.
+
+Arev Fonts Copyright
+------------------------------
+
+Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the fonts accompanying this license ("Fonts") and
+associated documentation files (the "Font Software"), to reproduce
+and distribute the modifications to the Bitstream Vera Font Software,
+including without limitation the rights to use, copy, merge, publish,
+distribute, and/or sell copies of the Font Software, and to permit
+persons to whom the Font Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright and trademark notices and this permission notice
+shall be included in all copies of one or more of the Font Software
+typefaces.
+
+The Font Software may be modified, altered, or added to, and in
+particular the designs of glyphs or characters in the Fonts may be
+modified and additional glyphs or characters may be added to the
+Fonts, only if the fonts are renamed to names not containing either
+the words "Tavmjong Bah" or the word "Arev".
+
+This License becomes null and void to the extent applicable to Fonts
+or Font Software that has been modified and is distributed under the
+"Tavmjong Bah Arev" names.
+
+The Font Software may be sold as part of a larger software package but
+no copy of one or more of the Font Software typefaces may be sold by
+itself.
+
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL
+TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
+
+Except as contained in this notice, the name of Tavmjong Bah shall not
+be used in advertising or otherwise to promote the sale, use or other
+dealings in this Font Software without prior written authorization
+from Tavmjong Bah. For further information, contact: tavmjong @ free
+. fr.
+
+TeX Gyre DJV Math
+-----------------
+Fonts are (c) Bitstream (see below). DejaVu changes are in public domain.
+
+Math extensions done by B. Jackowski, P. Strzelczyk and P. Pianowski
+(on behalf of TeX users groups) are in public domain.
+
+Letters imported from Euler Fraktur from AMSfonts are (c) American
+Mathematical Society (see below).
+Bitstream Vera Fonts Copyright
+Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera
+is a trademark of Bitstream, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of the fonts accompanying this license ("Fonts") and associated documentation
+files (the "Font Software"), to reproduce and distribute the Font Software,
+including without limitation the rights to use, copy, merge, publish,
+distribute, and/or sell copies of the Font Software, and to permit persons
+to whom the Font Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright and trademark notices and this permission notice
+shall be included in all copies of one or more of the Font Software typefaces.
+
+The Font Software may be modified, altered, or added to, and in particular
+the designs of glyphs or characters in the Fonts may be modified and
+additional glyphs or characters may be added to the Fonts, only if the
+fonts are renamed to names not containing either the words "Bitstream"
+or the word "Vera".
+
+This License becomes null and void to the extent applicable to Fonts or
+Font Software that has been modified and is distributed under the
+"Bitstream Vera" names.
+
+The Font Software may be sold as part of a larger software package but
+no copy of one or more of the Font Software typefaces may be sold by itself.
+
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT,
+TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME
+FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING
+ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT
+OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN
+THE FONT SOFTWARE.
+Except as contained in this notice, the names of GNOME, the GNOME
+Foundation, and Bitstream Inc., shall not be used in advertising or
+otherwise to promote the sale, use or other dealings in this Font Software
+without prior written authorization from the GNOME Foundation or
+Bitstream Inc., respectively.
+For further information, contact: fonts at gnome dot org.
+
+AMSFonts (v. 2.2) copyright
+
+The PostScript Type 1 implementation of the AMSFonts produced by and
+previously distributed by Blue Sky Research and Y&Y, Inc. are now freely
+available for general use. This has been accomplished through the
+cooperation
+of a consortium of scientific publishers with Blue Sky Research and Y&Y.
+Members of this consortium include:
+
+Elsevier Science IBM Corporation Society for Industrial and Applied
+Mathematics (SIAM) Springer-Verlag American Mathematical Society (AMS)
+
+In order to assure the authenticity of these fonts, copyright will be
+held by the American Mathematical Society. This is not meant to restrict
+in any way the legitimate use of the fonts, such as (but not limited to)
+electronic distribution of documents containing these fonts, inclusion of
+these fonts into other public domain or commercial font collections or computer
+applications, use of the outline data to create derivative fonts and/or
+faces, etc. However, the AMS does require that the AMS copyright notice be
+removed from any derivative versions of the fonts which have been altered in
+any way. In addition, to ensure the fidelity of TeX documents using Computer
+Modern fonts, Professor Donald Knuth, creator of the Computer Modern faces,
+has requested that any alterations which yield different font metrics be
+given a different name.
+
+--- end of LICENSE ---
+
+-------------------------------------------------------------------------------
+
+%% This notice is provided with respect to Document Object Model (DOM) Level 2
+& 3, which may be included with JRE 8, JDK 8, and OpenJDK 8.
+
+--- begin of LICENSE ---
+
+W3C SOFTWARE NOTICE AND LICENSE
+
+http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+
+This work (and included software, documentation such as READMEs, or other
+related items) is being provided by the copyright holders under the following
+license. By obtaining, using and/or copying this work, you (the licensee)
+agree that you have read, understood, and will comply with the following terms
+and conditions.
+
+Permission to copy, modify, and distribute this software and its
+documentation, with or without modification, for any purpose and without fee
+or royalty is hereby granted, provided that you include the following on ALL
+copies of the software and documentation or portions thereof, including
+modifications:
+
+ 1.The full text of this NOTICE in a location viewable to users of the
+ redistributed or derivative work.
+
+ 2.Any pre-existing intellectual property disclaimers, notices, or terms and
+ conditions. If none exist, the W3C Software Short Notice should be included
+ (hypertext is preferred, text is permitted) within the body of any
+ redistributed or derivative code.
+
+ 3.Notice of any changes or modifications to the files, including the date
+ changes were made. (We recommend you provide URIs to the location from
+ which the code is derived.)
+
+THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS
+MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT
+LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR
+PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY
+THIRD PARTY PATENTS,COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
+
+COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL
+OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR
+DOCUMENTATION. The name and trademarks of copyright holders may NOT be used
+in advertising or publicity pertaining to the software without specific,
+written prior permission. Title to copyright in this software and any
+associated documentation will at all times remain with copyright holders.
+
+____________________________________
+
+This formulation of W3C's notice and license became active on December 31
+2002. This version removes the copyright ownership notice such that this
+license can be used with materials other than those owned by the W3C, reflects
+that ERCIM is now a host of the W3C, includes references to this specific
+dated version of the license, and removes the ambiguous grant of "use".
+Otherwise, this version is the same as the previous version and is written so
+as to preserve the Free Software Foundation's assessment of GPL compatibility
+and OSI's certification under the Open Source Definition. Please see our
+Copyright FAQ for common questions about using materials from our site,
+including specific terms and conditions for packages like libwww, Amaya, and
+Jigsaw. Other questions about this notice can be directed to
+site-policy@w3.org.
+
+--- end of LICENSE ---
+
+-------------------------------------------------------------------------------
+
+%% This notice is provided with respect to Dynalink v0.5, which may be
+included with JRE 8, JDK 8, and OpenJDK 8.
+
+--- begin of LICENSE ---
+
+Copyright (c) 2009-2013, Attila Szegedi
+
+All rights reserved.Redistribution and use in source and binary forms, with or
+without modification, are permitted provided that the following conditions are
+met:* Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer. * Redistributions in
+binary form must reproduce the above copyright notice, this list of
+conditions and the following disclaimer in the documentation and/or other
+materials provided with the distribution. * Neither the name of Attila
+Szegedi nor the names of its contributors may be used to endorse or promote
+products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THEPOSSIBILITY OF SUCH DAMAGE.
+
+--- end of LICENSE ---
+
+-------------------------------------------------------------------------------
+
+%% This notice is provided with respect to Elliptic Curve Cryptography, which
+may be included with JRE 8, JDK 8, and OpenJDK 8.
+
+You are receiving a copy of the Elliptic Curve Cryptography library in source
+form with the JDK 8 and OpenJDK 8 source distributions, and as object code in
+the JRE 8 & JDK 8 runtimes.
+
+In the case of the JRE & JDK runtimes, the terms of the Oracle license do
+NOT apply to the Elliptic Curve Cryptography library; it is licensed under the
+following license, separately from Oracle's JDK & JRE. If you do not wish to
+install the Elliptic Curve Cryptography library, you may delete the
+Elliptic Curve Cryptography library:
+ - On Solaris and Linux systems: delete $(JAVA_HOME)/lib/libsunec.so
+ - On Windows systems: delete $(JAVA_HOME)\bin\sunec.dll
+ - On Mac systems, delete:
+ for JRE: /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/libsunec.dylib
+ for JDK: $(JAVA_HOME)/jre/lib/libsunec.dylib
+
+Written Offer for ECC Source Code
+ For third party technology that you receive from Oracle in binary form
+ which is licensed under an open source license that gives you the right
+ to receive the source code for that binary, you can obtain a copy of
+ the applicable source code from this page:
+ http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/tip/src/share/native/sun/security/ec/impl
+
+ If the source code for the technology was not provided to you with the
+ binary, you can also receive a copy of the source code on physical
+ media by submitting a written request to:
+
+ Oracle America, Inc.
+ Attn: Associate General Counsel,
+ Development and Engineering Legal
+ 500 Oracle Parkway, 10th Floor
+ Redwood Shores, CA 94065
+
+ Or, you may send an email to Oracle using the form at:
+ http://www.oracle.com/goto/opensourcecode/request
+
+ Your request should include:
+ - The name of the component or binary file(s) for which you are requesting
+ the source code
+ - The name and version number of the Oracle product containing the binary
+ - The date you received the Oracle product
+ - Your name
+ - Your company name (if applicable)
+ - Your return mailing address and email and
+ - A telephone number in the event we need to reach you.
+
+ We may charge you a fee to cover the cost of physical media and processing.
+ Your request must be sent (i) within three (3) years of the date you
+ received the Oracle product that included the component or binary
+ file(s) that are the subject of your request, or (ii) in the case of
+ code licensed under the GPL v3, for as long as Oracle offers spare
+ parts or customer support for that product model.
+
+--- begin of LICENSE ---
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+ When we speak of free software, we are referring to freedom of use,
+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 and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard. To achieve this, non-free programs must be
+allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, 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 library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete 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 distribute a copy of this License along with the
+Library.
+
+ 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.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+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 Library, 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.
+
+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 Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you 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.
+
+ If distribution of 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 satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the materials to be 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.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library 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.
+
+ 9. 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 Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+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 with
+this License.
+
+ 11. 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 Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library 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 Library.
+
+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.
+
+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.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library 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.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser 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.
+
+Each version is given a distinguishing version number. If the Library
+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 Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+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.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "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
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. 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 LIBRARY 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
+LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+
+ Copyright (C)
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ , 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
+
+--- end of LICENSE ---
+
+-------------------------------------------------------------------------------
+
+%% This notice is provided with respect to ECMAScript Language
+Specification ECMA-262 Edition 5.1 which may be included with
+JRE 8, JDK 8, and OpenJDK 8.
+
+--- begin of LICENSE ---
+
+Copyright notice
+Copyright © 2011 Ecma International
+Ecma International
+Rue du Rhone 114
+CH-1204 Geneva
+Tel: +41 22 849 6000
+Fax: +41 22 849 6001
+Web: http://www.ecma-international.org
+
+This document and possible translations of it may be copied and furnished to
+others, and derivative works that comment on or otherwise explain it or assist
+in its implementation may be prepared, copied, published, and distributed, in
+whole or in part, without restriction of any kind, provided that the above
+copyright notice and this section are included on all such copies and derivative
+works. However, this document itself may not be modified in any way, including
+by removing the copyright notice or references to Ecma International, except as
+needed for the purpose of developing any document or deliverable produced by
+Ecma International (in which case the rules applied to copyrights must be
+followed) or as required to translate it into languages other than English. The
+limited permissions granted above are perpetual and will not be revoked by Ecma
+International or its successors or assigns. This document and the information
+contained herein is provided on an "AS IS" basis and ECMA INTERNATIONAL
+DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY
+WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY OWNERSHIP
+RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR
+PURPOSE." Software License
+
+All Software contained in this document ("Software)" is protected by copyright
+and is being made available under the "BSD License", included below. This
+Software may be subject to third party rights (rights from parties other than
+Ecma International), including patent rights, and no licenses under such third
+party rights are granted under this license even if the third party concerned is
+a member of Ecma International. SEE THE ECMA CODE OF CONDUCT IN PATENT MATTERS
+AVAILABLE AT http://www.ecma-international.org/memento/codeofconduct.htm FOR
+INFORMATION REGARDING THE LICENSING OF PATENT CLAIMS THAT ARE REQUIRED TO
+IMPLEMENT ECMA INTERNATIONAL STANDARDS*. Redistribution and use in source and
+binary forms, with or without modification, are permitted provided that the
+following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+this list of conditions and the following disclaimer in the documentation and/or
+other materials provided with the distribution.
+
+3. Neither the name of the authors nor Ecma International may be used to endorse
+or promote products derived from this software without specific prior written
+permission.
+
+THIS SOFTWARE IS PROVIDED BY THE ECMA INTERNATIONAL "AS IS" AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+SHALL ECMA INTERNATIONAL BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+OF SUCH DAMAGE.
+--- end of LICENSE ---
+
+-------------------------------------------------------------------------------
+
+%% This notice is provided with respect to freebXML Registry 3.0 & 3.1,
+which may be included with JRE 8, JDK 8, and OpenJDK 8.
+
+--- begin of LICENSE ---
+
+freebxml: Copyright (c) 2001 freebxml.org. All rights reserved.
+
+The names "The freebXML Registry Project" and "freebxml Software
+Foundation" must not be used to endorse or promote products derived
+from this software or be used in a product name without prior
+written permission. For written permission, please contact
+ebxmlrr-team@lists.sourceforge.net.
+
+This software consists of voluntary contributions made by many individuals
+on behalf of the the freebxml Software Foundation. For more information on
+the freebxml Software Foundation, please see .
+
+This product includes software developed by the Apache Software Foundation
+(http://www.apache.org/).
+
+The freebxml License, Version 1.1 5
+Copyright (c) 2001 freebxml.org. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ 3. The end-user documentation included with the redistribution, if
+ any, must include the following acknowlegement:
+ "This product includes software developed by
+ freebxml.org (http://www.freebxml.org/)."
+ Alternately, this acknowlegement may appear in the software itself,
+ if and wherever such third-party acknowlegements normally appear.
+
+ 4. The names "The freebXML Registry Project", "freebxml Software
+ Foundation" must not be used to endorse or promote products derived
+ from this software without prior written permission. For written
+ permission, please contact ebxmlrr-team@lists.sourceforge.net.
+
+ 5. Products derived from this software may not be called "freebxml",
+ "freebXML Registry" nor may freebxml" appear in their names without
+ prior written permission of the freebxml Group.
+
+THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE freebxml SOFTWARE FOUNDATION OR
+ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+--- end of LICENSE ---
+
+-------------------------------------------------------------------------------
+
+%% This notice is provided with respect to IAIK PKCS#11 Wrapper,
+which may be included with JRE 8, JDK 8, and OpenJDK 8.
+
+--- begin of LICENSE ---
+
+IAIK PKCS#11 Wrapper License
+
+Copyright (c) 2002 Graz University of Technology. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+3. The end-user documentation included with the redistribution, if any, must
+ include the following acknowledgment:
+
+ "This product includes software developed by IAIK of Graz University of
+ Technology."
+
+ Alternately, this acknowledgment may appear in the software itself, if and
+ wherever such third-party acknowledgments normally appear.
+
+4. The names "Graz University of Technology" and "IAIK of Graz University of
+ Technology" must not be used to endorse or promote products derived from this
+ software without prior written permission.
+
+5. Products derived from this software may not be called "IAIK PKCS Wrapper",
+ nor may "IAIK" appear in their name, without prior written permission of
+ Graz University of Technology.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+LICENSOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+--- end of LICENSE ---
+
+-------------------------------------------------------------------------------
+
+%% This notice is provided with respect to ICU4C 4.0.1 and ICU4J 4.4, which
+may be included with JRE 8, JDK 8, and OpenJDK 8.
+
+--- begin of LICENSE ---
+
+Copyright (c) 1995-2010 International Business Machines Corporation and others
+
+All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, and/or sell copies of the
+Software, and to permit persons to whom the Software is furnished to do so,
+provided that the above copyright notice(s) and this permission notice appear
+in all copies of the Software and that both the above copyright notice(s) and
+this permission notice appear in supporting documentation.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN
+NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE
+LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY
+DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+Except as contained in this notice, the name of a copyright holder shall not
+be used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization of the copyright holder.
+All trademarks and registered trademarks mentioned herein are the property of
+their respective owners.
+
+--- end of LICENSE ---
+
+-------------------------------------------------------------------------------
+
+%% This notice is provided with respect to IJG JPEG 6b, which may be
+included with JRE 8, JDK 8, and OpenJDK 8.
+
+--- begin of LICENSE ---
+
+This software is copyright (C) 1991-1998, Thomas G. Lane.
+All Rights Reserved except as specified below.
+
+Permission is hereby granted to use, copy, modify, and distribute this
+software (or portions thereof) for any purpose, without fee, subject to these
+conditions:
+(1) If any part of the source code for this software is distributed, then this
+README file must be included, with this copyright and no-warranty notice
+unaltered; and any additions, deletions, or changes to the original files
+must be clearly indicated in accompanying documentation.
+(2) If only executable code is distributed, then the accompanying
+documentation must state that "this software is based in part on the work of
+the Independent JPEG Group".
+(3) Permission for use of this software is granted only if the user accepts
+full responsibility for any undesirable consequences; the authors accept
+NO LIABILITY for damages of any kind.
+
+These conditions apply to any software derived from or based on the IJG code,
+not just to the unmodified library. If you use our work, you ought to
+acknowledge us.
+
+Permission is NOT granted for the use of any IJG author's name or company name
+in advertising or publicity relating to this software or products derived from
+it. This software may be referred to only as "the Independent JPEG Group's
+software".
+
+We specifically permit and encourage the use of this software as the basis of
+commercial products, provided that all warranty or liability claims are
+assumed by the product vendor.
+
+--- end of LICENSE ---
+
+--------------------------------------------------------------------------------
+
+%% This notice is provided with respect to Jing 20030619, which may
+be included with JRE 8, JDK 8, and OpenJDK 8.
+
+--- begin of LICENSE ---
+
+Copyright (c) 2001-2003 Thai Open Source Software Center Ltd All
+rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+
+Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+
+Neither the name of the Thai Open Source Software Center Ltd nor
+the names of its contributors may be used to endorse or promote
+products derived from this software without specific prior written
+permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+--- end of LICENSE ---
+
+--------------------------------------------------------------------------------
+
+%% This notice is provided with respect to Joni v2.1.16, which may be
+included with JRE 8, JDK 8, and OpenJDK 8.
+
+--- begin of LICENSE ---
+
+Copyright (c) 2017 JRuby Team
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+--- end of LICENSE ---
+
+-------------------------------------------------------------------------------
+
+%% This notice is provided with respect to JOpt-Simple v3.0, which may be
+included with JRE 8, JDK 8, and OpenJDK 8.
+
+--- begin of LICENSE ---
+
+ Copyright (c) 2004-2009 Paul R. Holser, Jr.
+
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+--- end of LICENSE ---
+
+--------------------------------------------------------------------------------
+
+%% This notice is provided with respect to Kerberos functionality, which
+which may be included with JRE 8, JDK 8, and OpenJDK 8.
+
+--- begin of LICENSE ---
+
+ (C) Copyright IBM Corp. 1999 All Rights Reserved.
+ Copyright 1997 The Open Group Research Institute. All rights reserved.
+
+--- end of LICENSE ---
+
+-------------------------------------------------------------------------------
+
+%% This notice is provided with respect to Kerberos functionality from
+FundsXpress, INC., which may be included with JRE 8, JDK 8, and OpenJDK 8.
+
+--- begin of LICENSE ---
+
+ Copyright (C) 1998 by the FundsXpress, INC.
+
+ All rights reserved.
+
+ Export of this software from the United States of America may require
+ a specific license from the United States Government. It is the
+ responsibility of any person or organization contemplating export to
+ obtain such a license before exporting.
+
+ WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
+ distribute this software and its documentation for any purpose and
+ without fee is hereby granted, provided that the above copyright
+ notice appear in all copies and that both that copyright notice and
+ this permission notice appear in supporting documentation, and that
+ the name of FundsXpress. not be used in advertising or publicity pertaining
+ to distribution of the software without specific, written prior
+ permission. FundsXpress makes no representations about the suitability of
+ this software for any purpose. It is provided "as is" without express
+ or implied warranty.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+--- end of LICENSE ---
+
+-------------------------------------------------------------------------------
+
+%% This notice is provided with respect to Kronos OpenGL headers, which may be
+included with JDK 8 and OpenJDK 8 source distributions.
+
+--- begin of LICENSE ---
+
+ Copyright (c) 2007 The Khronos Group Inc.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and/or associated documentation files (the "Materials"), to
+ deal in the Materials without restriction, including without limitation the
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ sell copies of the Materials, and to permit persons to whom the Materials are
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Materials.
+
+ THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS IN THE
+ MATERIALS.
+
+--- end of LICENSE ---
+
+-------------------------------------------------------------------------------
+
+%% Portions Copyright Eastman Kodak Company 1991-2003
+
+-------------------------------------------------------------------------------
+
+%% This notice is provided with respect to libpng 1.6.37, which may be
+included with JRE 8, JDK 8, and OpenJDK 8.
+
+--- begin of LICENSE ---
+
+COPYRIGHT NOTICE, DISCLAIMER, and LICENSE
+=========================================
+
+PNG Reference Library License version 2
+---------------------------------------
+
+ * Copyright (c) 1995-2019 The PNG Reference Library Authors.
+ * Copyright (c) 2018-2019 Cosmin Truta.
+ * Copyright (c) 2000-2002, 2004, 2006-2018 Glenn Randers-Pehrson.
+ * Copyright (c) 1996-1997 Andreas Dilger.
+ * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
+
+The software is supplied "as is", without warranty of any kind,
+express or implied, including, without limitation, the warranties
+of merchantability, fitness for a particular purpose, title, and
+non-infringement. In no event shall the Copyright owners, or
+anyone distributing the software, be liable for any damages or
+other liability, whether in contract, tort or otherwise, arising
+from, out of, or in connection with the software, or the use or
+other dealings in the software, even if advised of the possibility
+of such damage.
+
+Permission is hereby granted to use, copy, modify, and distribute
+this software, or portions hereof, for any purpose, without fee,
+subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you
+ must not claim that you wrote the original software. If you
+ use this software in a product, an acknowledgment in the product
+ documentation would be appreciated, but is not required.
+
+ 2. Altered source versions must be plainly marked as such, and must
+ not be misrepresented as being the original software.
+
+ 3. This Copyright notice may not be removed or altered from any
+ source or altered source distribution.
+
+
+PNG Reference Library License version 1 (for libpng 0.5 through 1.6.35)
+-----------------------------------------------------------------------
+
+libpng versions 1.0.7, July 1, 2000, through 1.6.35, July 15, 2018 are
+Copyright (c) 2000-2002, 2004, 2006-2018 Glenn Randers-Pehrson, are
+derived from libpng-1.0.6, and are distributed according to the same
+disclaimer and license as libpng-1.0.6 with the following individuals
+added to the list of Contributing Authors:
+
+ Simon-Pierre Cadieux
+ Eric S. Raymond
+ Mans Rullgard
+ Cosmin Truta
+ Gilles Vollant
+ James Yu
+ Mandar Sahastrabuddhe
+ Google Inc.
+ Vadim Barkov
+
+and with the following additions to the disclaimer:
+
+ There is no warranty against interference with your enjoyment of
+ the library or against infringement. There is no warranty that our
+ efforts or the library will fulfill any of your particular purposes
+ or needs. This library is provided with all faults, and the entire
+ risk of satisfactory quality, performance, accuracy, and effort is
+ with the user.
+
+Some files in the "contrib" directory and some configure-generated
+files that are distributed with libpng have other copyright owners, and
+are released under other open source licenses.
+
+libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
+Copyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from
+libpng-0.96, and are distributed according to the same disclaimer and
+license as libpng-0.96, with the following individuals added to the
+list of Contributing Authors:
+
+ Tom Lane
+ Glenn Randers-Pehrson
+ Willem van Schaik
+
+libpng versions 0.89, June 1996, through 0.96, May 1997, are
+Copyright (c) 1996-1997 Andreas Dilger, are derived from libpng-0.88,
+and are distributed according to the same disclaimer and license as
+libpng-0.88, with the following individuals added to the list of
+Contributing Authors:
+
+ John Bowler
+ Kevin Bracey
+ Sam Bushell
+ Magnus Holmgren
+ Greg Roelofs
+ Tom Tanner
+
+Some files in the "scripts" directory have other copyright owners,
+but are released under this license.
+
+libpng versions 0.5, May 1995, through 0.88, January 1996, are
+Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
+
+For the purposes of this copyright and license, "Contributing Authors"
+is defined as the following set of individuals:
+
+ Andreas Dilger
+ Dave Martindale
+ Guy Eric Schalnat
+ Paul Schmidt
+ Tim Wegner
+
+The PNG Reference Library is supplied "AS IS". The Contributing
+Authors and Group 42, Inc. disclaim all warranties, expressed or
+implied, including, without limitation, the warranties of
+merchantability and of fitness for any purpose. The Contributing
+Authors and Group 42, Inc. assume no liability for direct, indirect,
+incidental, special, exemplary, or consequential damages, which may
+result from the use of the PNG Reference Library, even if advised of
+the possibility of such damage.
+
+Permission is hereby granted to use, copy, modify, and distribute this
+source code, or portions hereof, for any purpose, without fee, subject
+to the following restrictions:
+
+ 1. The origin of this source code must not be misrepresented.
+
+ 2. Altered versions must be plainly marked as such and must not
+ be misrepresented as being the original source.
+
+ 3. This Copyright notice may not be removed or altered from any
+ source or altered source distribution.
+
+The Contributing Authors and Group 42, Inc. specifically permit,
+without fee, and encourage the use of this source code as a component
+to supporting the PNG file format in commercial products. If you use
+this source code in a product, acknowledgment is not required but would
+be appreciated.
+
+TRADEMARK:
+
+The name "libpng" has not been registered by the Copyright owner
+as a trademark in any jurisdiction. However, because libpng has
+been distributed and maintained world-wide, continually since 1995,
+the Copyright owner claims "common-law trademark protection" in any
+jurisdiction where common-law trademark is recognized.
+
+OSI CERTIFICATION:
+
+Libpng is OSI Certified Open Source Software. OSI Certified Open Source is
+a certification mark of the Open Source Initiative. OSI has not addressed
+the additional disclaimers inserted at version 1.0.7.
+
+EXPORT CONTROL:
+
+The Copyright owner believes that the Export Control Classification
+Number (ECCN) for libpng is EAR99, which means not subject to export
+controls or International Traffic in Arms Regulations (ITAR) because
+it is open source, publicly available software, that does not contain
+any encryption software. See the EAR, paragraphs 734.3(b)(3) and
+734.7(b).
+
+Glenn Randers-Pehrson
+glennrp at users.sourceforge.net
+July 15, 2018
+
+--- end of LICENSE ---
+
+-------------------------------------------------------------------------------
+
+%% This notice is provided with respect to GIFLIB 5.2.1 & libungif 4.1.3,
+which may be included with JRE 8, JDK 8, and OpenJDK 8.
+
+--- begin of LICENSE ---
+
+The GIFLIB distribution is Copyright (c) 1997 Eric S. Raymond
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+--- end of LICENSE ---
+
+-------------------------------------------------------------------------------
+
+%% This notice is provided with respect to Little CMS 2.11, which may be
+included with JRE 8, JDK 8, and OpenJDK 8.
+
+--- begin of LICENSE ---
+
+Little CMS
+Copyright (c) 1998-2020 Marti Maria Saguer
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+--- end of LICENSE ---
+
+-------------------------------------------------------------------------------
+
+%% Lucida is a registered trademark or trademark of Bigelow & Holmes in the
+U.S. and other countries.
+
+-------------------------------------------------------------------------------
+
+%% This notice is provided with respect to Mesa 3D Graphics Library v4.1,
+which may be included with JRE 8, JDK 8, and OpenJDK 8 source distributions.
+
+--- begin of LICENSE ---
+
+ Mesa 3-D Graphics Library v19.2.1
+
+ Copyright (C) 1999-2007 Brian Paul All Rights Reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining a
+ copy of this software and associated documentation files (the "Software"),
+ to deal in the Software without restriction, including without limitation
+ the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ and/or sell copies of the Software, and to permit persons to whom the
+ Software is furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included
+ in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+
+Attention, Contributors
+
+When contributing to the Mesa project you must agree to the licensing terms
+of the component to which you're contributing.
+The following section lists the primary components of the Mesa distribution
+and their respective licenses.
+Mesa Component Licenses
+
+
+
+Component Location License
+------------------------------------------------------------------
+Main Mesa code src/mesa/ MIT
+Device drivers src/mesa/drivers/* MIT, generally
+
+Gallium code src/gallium/ MIT
+
+Ext headers GL/glext.h Khronos
+ GL/glxext.h Khronos
+ GL/wglext.h Khronos
+ KHR/khrplatform.h Khronos
+
+*****************************************************************************
+
+----
+include/GL/gl.h :
+
+
+ Mesa 3-D graphics library
+
+ Copyright (C) 1999-2006 Brian Paul All Rights Reserved.
+ Copyright (C) 2009 VMware, Inc. All Rights Reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining a
+ copy of this software and associated documentation files (the "Software"),
+ to deal in the Software without restriction, including without limitation
+ the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ and/or sell copies of the Software, and to permit persons to whom the
+ Software is furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included
+ in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ OTHER DEALINGS IN THE SOFTWARE.
+
+ *****************************************************************************
+
+----
+include/GL/glext.h
+include/GL/glxext.h
+include/GL/wglxext.h :
+
+
+ Copyright (c) 2013 - 2018 The Khronos Group Inc.
+
+ Permission is hereby granted, free of charge, to any person obtaining a
+ copy of this software and/or associated documentation files (the
+ "Materials"), to deal in the Materials without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Materials, and to
+ permit persons to whom the Materials are furnished to do so, subject to
+ the following conditions:
+
+ The above copyright notice and this permission notice shall be included
+ in all copies or substantial portions of the Materials.
+
+ THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+
+ *****************************************************************************
+
+----
+include/KHR/khrplatform.h :
+
+ Copyright (c) 2008 - 2018 The Khronos Group Inc.
+
+ Permission is hereby granted, free of charge, to any person obtaining a
+ copy of this software and/or associated documentation files (the
+ "Materials"), to deal in the Materials without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Materials, and to
+ permit persons to whom the Materials are furnished to do so, subject to
+ the following conditions:
+
+ The above copyright notice and this permission notice shall be included
+ in all copies or substantial portions of the Materials.
+
+ THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+
+ *****************************************************************************
+
+--- end of LICENSE ---
+
+-------------------------------------------------------------------------------
+
+%% This notice is provided with respect to Mozilla Network Security
+Services (NSS), which is supplied with the JDK test suite in the OpenJDK
+source code repository. It is licensed under Mozilla Public License (MPL),
+version 2.0.
+
+The NSS libraries are supplied in executable form, built from unmodified
+NSS source code labeled with the "NSS_3_16_RTM" HG tag.
+
+The NSS source code is available in the OpenJDK source code repository at:
+ jdk/test/sun/security/pkcs11/nss/src
+
+The NSS libraries are available in the OpenJDK source code repository at:
+ jdk/test/sun/security/pkcs11/nss/lib
+
+--- begin of LICENSE ---
+
+Mozilla Public License Version 2.0
+==================================
+
+1. Definitions
+--------------
+
+1.1. "Contributor"
+ means each individual or legal entity that creates, contributes to
+ the creation of, or owns Covered Software.
+
+1.2. "Contributor Version"
+ means the combination of the Contributions of others (if any) used
+ by a Contributor and that particular Contributor's Contribution.
+
+1.3. "Contribution"
+ means Covered Software of a particular Contributor.
+
+1.4. "Covered Software"
+ means Source Code Form to which the initial Contributor has attached
+ the notice in Exhibit A, the Executable Form of such Source Code
+ Form, and Modifications of such Source Code Form, in each case
+ including portions thereof.
+
+1.5. "Incompatible With Secondary Licenses"
+ means
+
+ (a) that the initial Contributor has attached the notice described
+ in Exhibit B to the Covered Software; or
+
+ (b) that the Covered Software was made available under the terms of
+ version 1.1 or earlier of the License, but not also under the
+ terms of a Secondary License.
+
+1.6. "Executable Form"
+ means any form of the work other than Source Code Form.
+
+1.7. "Larger Work"
+ means a work that combines Covered Software with other material, in
+ a separate file or files, that is not Covered Software.
+
+1.8. "License"
+ means this document.
+
+1.9. "Licensable"
+ means having the right to grant, to the maximum extent possible,
+ whether at the time of the initial grant or subsequently, any and
+ all of the rights conveyed by this License.
+
+1.10. "Modifications"
+ means any of the following:
+
+ (a) any file in Source Code Form that results from an addition to,
+ deletion from, or modification of the contents of Covered
+ Software; or
+
+ (b) any new file in Source Code Form that contains any Covered
+ Software.
+
+1.11. "Patent Claims" of a Contributor
+ means any patent claim(s), including without limitation, method,
+ process, and apparatus claims, in any patent Licensable by such
+ Contributor that would be infringed, but for the grant of the
+ License, by the making, using, selling, offering for sale, having
+ made, import, or transfer of either its Contributions or its
+ Contributor Version.
+
+1.12. "Secondary License"
+ means either the GNU General Public License, Version 2.0, the GNU
+ Lesser General Public License, Version 2.1, the GNU Affero General
+ Public License, Version 3.0, or any later versions of those
+ licenses.
+
+1.13. "Source Code Form"
+ means the form of the work preferred for making modifications.
+
+1.14. "You" (or "Your")
+ means an individual or a legal entity exercising rights under this
+ License. For legal entities, "You" includes any entity that
+ controls, is controlled by, or is under common control with You. For
+ purposes of this definition, "control" means (a) the power, direct
+ or indirect, to cause the direction or management of such entity,
+ whether by contract or otherwise, or (b) ownership of more than
+ fifty percent (50%) of the outstanding shares or beneficial
+ ownership of such entity.
+
+2. License Grants and Conditions
+--------------------------------
+
+2.1. Grants
+
+Each Contributor hereby grants You a world-wide, royalty-free,
+non-exclusive license:
+
+(a) under intellectual property rights (other than patent or trademark)
+ Licensable by such Contributor to use, reproduce, make available,
+ modify, display, perform, distribute, and otherwise exploit its
+ Contributions, either on an unmodified basis, with Modifications, or
+ as part of a Larger Work; and
+
+(b) under Patent Claims of such Contributor to make, use, sell, offer
+ for sale, have made, import, and otherwise transfer either its
+ Contributions or its Contributor Version.
+
+2.2. Effective Date
+
+The licenses granted in Section 2.1 with respect to any Contribution
+become effective for each Contribution on the date the Contributor first
+distributes such Contribution.
+
+2.3. Limitations on Grant Scope
+
+The licenses granted in this Section 2 are the only rights granted under
+this License. No additional rights or licenses will be implied from the
+distribution or licensing of Covered Software under this License.
+Notwithstanding Section 2.1(b) above, no patent license is granted by a
+Contributor:
+
+(a) for any code that a Contributor has removed from Covered Software;
+ or
+
+(b) for infringements caused by: (i) Your and any other third party's
+ modifications of Covered Software, or (ii) the combination of its
+ Contributions with other software (except as part of its Contributor
+ Version); or
+
+(c) under Patent Claims infringed by Covered Software in the absence of
+ its Contributions.
+
+This License does not grant any rights in the trademarks, service marks,
+or logos of any Contributor (except as may be necessary to comply with
+the notice requirements in Section 3.4).
+
+2.4. Subsequent Licenses
+
+No Contributor makes additional grants as a result of Your choice to
+distribute the Covered Software under a subsequent version of this
+License (see Section 10.2) or under the terms of a Secondary License (if
+permitted under the terms of Section 3.3).
+
+2.5. Representation
+
+Each Contributor represents that the Contributor believes its
+Contributions are its original creation(s) or it has sufficient rights
+to grant the rights to its Contributions conveyed by this License.
+
+2.6. Fair Use
+
+This License is not intended to limit any rights You have under
+applicable copyright doctrines of fair use, fair dealing, or other
+equivalents.
+
+2.7. Conditions
+
+Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
+in Section 2.1.
+
+3. Responsibilities
+-------------------
+
+3.1. Distribution of Source Form
+
+All distribution of Covered Software in Source Code Form, including any
+Modifications that You create or to which You contribute, must be under
+the terms of this License. You must inform recipients that the Source
+Code Form of the Covered Software is governed by the terms of this
+License, and how they can obtain a copy of this License. You may not
+attempt to alter or restrict the recipients' rights in the Source Code
+Form.
+
+3.2. Distribution of Executable Form
+
+If You distribute Covered Software in Executable Form then:
+
+(a) such Covered Software must also be made available in Source Code
+ Form, as described in Section 3.1, and You must inform recipients of
+ the Executable Form how they can obtain a copy of such Source Code
+ Form by reasonable means in a timely manner, at a charge no more
+ than the cost of distribution to the recipient; and
+
+(b) You may distribute such Executable Form under the terms of this
+ License, or sublicense it under different terms, provided that the
+ license for the Executable Form does not attempt to limit or alter
+ the recipients' rights in the Source Code Form under this License.
+
+3.3. Distribution of a Larger Work
+
+You may create and distribute a Larger Work under terms of Your choice,
+provided that You also comply with the requirements of this License for
+the Covered Software. If the Larger Work is a combination of Covered
+Software with a work governed by one or more Secondary Licenses, and the
+Covered Software is not Incompatible With Secondary Licenses, this
+License permits You to additionally distribute such Covered Software
+under the terms of such Secondary License(s), so that the recipient of
+the Larger Work may, at their option, further distribute the Covered
+Software under the terms of either this License or such Secondary
+License(s).
+
+3.4. Notices
+
+You may not remove or alter the substance of any license notices
+(including copyright notices, patent notices, disclaimers of warranty,
+or limitations of liability) contained within the Source Code Form of
+the Covered Software, except that You may alter any license notices to
+the extent required to remedy known factual inaccuracies.
+
+3.5. Application of Additional Terms
+
+You may choose to offer, and to charge a fee for, warranty, support,
+indemnity or liability obligations to one or more recipients of Covered
+Software. However, You may do so only on Your own behalf, and not on
+behalf of any Contributor. You must make it absolutely clear that any
+such warranty, support, indemnity, or liability obligation is offered by
+You alone, and You hereby agree to indemnify every Contributor for any
+liability incurred by such Contributor as a result of warranty, support,
+indemnity or liability terms You offer. You may include additional
+disclaimers of warranty and limitations of liability specific to any
+jurisdiction.
+
+4. Inability to Comply Due to Statute or Regulation
+---------------------------------------------------
+
+If it is impossible for You to comply with any of the terms of this
+License with respect to some or all of the Covered Software due to
+statute, judicial order, or regulation then You must: (a) comply with
+the terms of this License to the maximum extent possible; and (b)
+describe the limitations and the code they affect. Such description must
+be placed in a text file included with all distributions of the Covered
+Software under this License. Except to the extent prohibited by statute
+or regulation, such description must be sufficiently detailed for a
+recipient of ordinary skill to be able to understand it.
+
+5. Termination
+--------------
+
+5.1. The rights granted under this License will terminate automatically
+if You fail to comply with any of its terms. However, if You become
+compliant, then the rights granted under this License from a particular
+Contributor are reinstated (a) provisionally, unless and until such
+Contributor explicitly and finally terminates Your grants, and (b) on an
+ongoing basis, if such Contributor fails to notify You of the
+non-compliance by some reasonable means prior to 60 days after You have
+come back into compliance. Moreover, Your grants from a particular
+Contributor are reinstated on an ongoing basis if such Contributor
+notifies You of the non-compliance by some reasonable means, this is the
+first time You have received notice of non-compliance with this License
+from such Contributor, and You become compliant prior to 30 days after
+Your receipt of the notice.
+
+5.2. If You initiate litigation against any entity by asserting a patent
+infringement claim (excluding declaratory judgment actions,
+counter-claims, and cross-claims) alleging that a Contributor Version
+directly or indirectly infringes any patent, then the rights granted to
+You by any and all Contributors for the Covered Software under Section
+2.1 of this License shall terminate.
+
+5.3. In the event of termination under Sections 5.1 or 5.2 above, all
+end user license agreements (excluding distributors and resellers) which
+have been validly granted by You or Your distributors under this License
+prior to termination shall survive termination.
+
+************************************************************************
+* *
+* 6. Disclaimer of Warranty *
+* ------------------------- *
+* *
+* Covered Software is provided under this License on an "as is" *
+* basis, without warranty of any kind, either expressed, implied, or *
+* statutory, including, without limitation, warranties that the *
+* Covered Software is free of defects, merchantable, fit for a *
+* particular purpose or non-infringing. The entire risk as to the *
+* quality and performance of the Covered Software is with You. *
+* Should any Covered Software prove defective in any respect, You *
+* (not any Contributor) assume the cost of any necessary servicing, *
+* repair, or correction. This disclaimer of warranty constitutes an *
+* essential part of this License. No use of any Covered Software is *
+* authorized under this License except under this disclaimer. *
+* *
+************************************************************************
+
+************************************************************************
+* *
+* 7. Limitation of Liability *
+* -------------------------- *
+* *
+* Under no circumstances and under no legal theory, whether tort *
+* (including negligence), contract, or otherwise, shall any *
+* Contributor, or anyone who distributes Covered Software as *
+* permitted above, be liable to You for any direct, indirect, *
+* special, incidental, or consequential damages of any character *
+* including, without limitation, damages for lost profits, loss of *
+* goodwill, work stoppage, computer failure or malfunction, or any *
+* and all other commercial damages or losses, even if such party *
+* shall have been informed of the possibility of such damages. This *
+* limitation of liability shall not apply to liability for death or *
+* personal injury resulting from such party's negligence to the *
+* extent applicable law prohibits such limitation. Some *
+* jurisdictions do not allow the exclusion or limitation of *
+* incidental or consequential damages, so this exclusion and *
+* limitation may not apply to You. *
+* *
+************************************************************************
+
+8. Litigation
+-------------
+
+Any litigation relating to this License may be brought only in the
+courts of a jurisdiction where the defendant maintains its principal
+place of business and such litigation shall be governed by laws of that
+jurisdiction, without reference to its conflict-of-law provisions.
+Nothing in this Section shall prevent a party's ability to bring
+cross-claims or counter-claims.
+
+9. Miscellaneous
+----------------
+
+This License represents the complete agreement concerning the subject
+matter hereof. If any provision of this License is held to be
+unenforceable, such provision shall be reformed only to the extent
+necessary to make it enforceable. Any law or regulation which provides
+that the language of a contract shall be construed against the drafter
+shall not be used to construe this License against a Contributor.
+
+10. Versions of the License
+---------------------------
+
+10.1. New Versions
+
+Mozilla Foundation is the license steward. Except as provided in Section
+10.3, no one other than the license steward has the right to modify or
+publish new versions of this License. Each version will be given a
+distinguishing version number.
+
+10.2. Effect of New Versions
+
+You may distribute the Covered Software under the terms of the version
+of the License under which You originally received the Covered Software,
+or under the terms of any subsequent version published by the license
+steward.
+
+10.3. Modified Versions
+
+If you create software not governed by this License, and you want to
+create a new license for such software, you may create and use a
+modified version of this License if you rename the license and remove
+any references to the name of the license steward (except to note that
+such modified license differs from this License).
+
+10.4. Distributing Source Code Form that is Incompatible With Secondary
+Licenses
+
+If You choose to distribute Source Code Form that is Incompatible With
+Secondary Licenses under the terms of this version of the License, the
+notice described in Exhibit B of this License must be attached.
+
+Exhibit A - Source Code Form License Notice
+-------------------------------------------
+
+ This Source Code Form is subject to the terms of the Mozilla Public
+ License, v. 2.0. If a copy of the MPL was not distributed with this
+ file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+If it is not possible or desirable to put the notice in a particular
+file, then You may include the notice in a location (such as a LICENSE
+file in a relevant directory) where a recipient would be likely to look
+for such a notice.
+
+You may add additional accurate notices of copyright ownership.
+
+Exhibit B - "Incompatible With Secondary Licenses" Notice
+---------------------------------------------------------
+
+ This Source Code Form is "Incompatible With Secondary Licenses", as
+ defined by the Mozilla Public License, v. 2.0.
+
+--- end of LICENSE ---
+
+-------------------------------------------------------------------------------
+
+%% This notice is provided with respect to PC/SC Lite v1.8.26,
+which may be included with JRE 8, JDK 8, and OpenJDK 8 on Linux and Solaris.
+
+--- begin of LICENSE ---
+
+Copyright (c) 1999-2003 David Corcoran
+Copyright (c) 2001-2011 Ludovic Rousseau
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+3. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+Changes to this license can be made only by the copyright author with
+explicit written consent.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+--- end of LICENSE ---
+
+-------------------------------------------------------------------------------
+
+%% This notice is provided with respect to PorterStemmer v4, which may be
+included with JRE 8, JDK 8, and OpenJDK 8.
+
+--- begin of LICENSE ---
+
+See: http://tartarus.org/~martin/PorterStemmer
+
+The software is completely free for any purpose, unless notes at the head of
+the program text indicates otherwise (which is rare). In any case, the notes
+about licensing are never more restrictive than the BSD License.
+
+In every case where the software is not written by me (Martin Porter), this
+licensing arrangement has been endorsed by the contributor, and it is
+therefore unnecessary to ask the contributor again to confirm it.
+
+I have not asked any contributors (or their employers, if they have them) for
+proofs that they have the right to distribute their software in this way.
+
+--- end of LICENSE ---
+
+-------------------------------------------------------------------------------
+
+%% This notice is provided with respect to Relax NG Object/Parser v.20050510,
+which may be included with JRE 8, JDK 8, and OpenJDK 8.
+
+--- begin of LICENSE ---
+
+Copyright (c) Kohsuke Kawaguchi
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions: The above copyright
+notice and this permission notice shall be included in all copies or
+substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+--- end of LICENSE ---
+
+-------------------------------------------------------------------------------
+
+%% This notice is provided with respect to RelaxNGCC v1.12, which may be
+included with JRE 8, JDK 8, and OpenJDK 8.
+
+--- begin of LICENSE ---
+
+Copyright (c) 2000-2003 Daisuke Okajima and Kohsuke Kawaguchi.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+3. The end-user documentation included with the redistribution, if any, must
+ include the following acknowledgment:
+
+ "This product includes software developed by Daisuke Okajima
+ and Kohsuke Kawaguchi (http://relaxngcc.sf.net/)."
+
+Alternately, this acknowledgment may appear in the software itself, if and
+wherever such third-party acknowledgments normally appear.
+
+4. The names of the copyright holders must not be used to endorse or promote
+ products derived from this software without prior written permission. For
+ written permission, please contact the copyright holders.
+
+5. Products derived from this software may not be called "RELAXNGCC", nor may
+ "RELAXNGCC" appear in their name, without prior written permission of the
+ copyright holders.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.IN NO EVENT SHALL THE APACHE
+SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+--- end of LICENSE ---
+
+-------------------------------------------------------------------------------
+
+%% This notice is provided with respect to Relax NG Datatype 1.0, which
+may be included with JRE 8, JDK 8, and OpenJDK 8.
+
+--- begin of LICENSE ---
+
+Copyright (c) 2005, 2010 Thai Open Source Software Center Ltd
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ Neither the names of the copyright holders nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+--- end of LICENSE ---
+
+--------------------------------------------------------------------------------
+
+%% This notice is provided with respect to SoftFloat version 2b, which may be
+included with JRE 8, JDK 8, and OpenJDK 8 on Linux/ARM.
+
+--- begin of LICENSE ---
+
+Use of any of this software is governed by the terms of the license below:
+
+SoftFloat was written by me, John R. Hauser. This work was made possible in
+part by the International Computer Science Institute, located at Suite 600,
+1947 Center Street, Berkeley, California 94704. Funding was partially
+provided by the National Science Foundation under grant MIP-9311980. The
+original version of this code was written as part of a project to build
+a fixed-point vector processor in collaboration with the University of
+California at Berkeley, overseen by Profs. Nelson Morgan and John Wawrzynek.
+
+THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
+has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
+TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
+PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL
+LOSSES, COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO
+FURTHERMORE EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER
+SCIENCE INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES,
+COSTS, OR OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE
+SOFTWARE.
+
+Derivative works are acceptable, even for commercial purposes, provided
+that the minimal documentation requirements stated in the source code are
+satisfied.
+
+--- end of LICENSE ---
+
+-------------------------------------------------------------------------------
+
+%% This notice is provided with respect to Sparkle 1.5,
+which may be included with JRE 8 on Mac OS X.
+
+--- begin of LICENSE ---
+
+Copyright (c) 2012 Sparkle.org and Andy Matuschak
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+--- end of LICENSE ---
+
+-------------------------------------------------------------------------------
+
+%% Portions licensed from Taligent, Inc.
+
+-------------------------------------------------------------------------------
+
+%% This notice is provided with respect to Thai Dictionary, which may be
+included with JRE 8, JDK 8, and OpenJDK 8.
+
+--- begin of LICENSE ---
+
+Copyright (C) 1982 The Royal Institute, Thai Royal Government.
+
+Copyright (C) 1998 National Electronics and Computer Technology Center,
+National Science and Technology Development Agency,
+Ministry of Science Technology and Environment,
+Thai Royal Government.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+--- end of LICENSE ---
+
+-------------------------------------------------------------------------------
+
+%% This notice is provided with respect to Unicode 6.2.0 & CLDR 21.0.1
+which may be included with JRE 8, JDK 8, and OpenJDK 8.
+
+--- begin of LICENSE ---
+
+Unicode Terms of Use
+
+For the general privacy policy governing access to this site, see the Unicode
+Privacy Policy. For trademark usage, see the Unicode® Consortium Name and
+Trademark Usage Policy.
+
+A. Unicode Copyright.
+ 1. Copyright © 1991-2013 Unicode, Inc. All rights reserved.
+
+ 2. Certain documents and files on this website contain a legend indicating
+ that "Modification is permitted." Any person is hereby authorized,
+ without fee, to modify such documents and files to create derivative
+ works conforming to the Unicode® Standard, subject to Terms and
+ Conditions herein.
+
+ 3. Any person is hereby authorized, without fee, to view, use, reproduce,
+ and distribute all documents and files solely for informational
+ purposes in the creation of products supporting the Unicode Standard,
+ subject to the Terms and Conditions herein.
+
+ 4. Further specifications of rights and restrictions pertaining to the use
+ of the particular set of data files known as the "Unicode Character
+ Database" can be found in Exhibit 1.
+
+ 5. Each version of the Unicode Standard has further specifications of
+ rights and restrictions of use. For the book editions (Unicode 5.0 and
+ earlier), these are found on the back of the title page. The online
+ code charts carry specific restrictions. All other files, including
+ online documentation of the core specification for Unicode 6.0 and
+ later, are covered under these general Terms of Use.
+
+ 6. No license is granted to "mirror" the Unicode website where a fee is
+ charged for access to the "mirror" site.
+
+ 7. Modification is not permitted with respect to this document. All copies
+ of this document must be verbatim.
+
+B. Restricted Rights Legend. Any technical data or software which is licensed
+ to the United States of America, its agencies and/or instrumentalities
+ under this Agreement is commercial technical data or commercial computer
+ software developed exclusively at private expense as defined in FAR 2.101,
+ or DFARS 252.227-7014 (June 1995), as applicable. For technical data, use,
+ duplication, or disclosure by the Government is subject to restrictions as
+ set forth in DFARS 202.227-7015 Technical Data, Commercial and Items (Nov
+ 1995) and this Agreement. For Software, in accordance with FAR 12-212 or
+ DFARS 227-7202, as applicable, use, duplication or disclosure by the
+ Government is subject to the restrictions set forth in this Agreement.
+
+C. Warranties and Disclaimers.
+ 1. This publication and/or website may include technical or typographical
+ errors or other inaccuracies . Changes are periodically added to the
+ information herein; these changes will be incorporated in new editions
+ of the publication and/or website. Unicode may make improvements and/or
+ changes in the product(s) and/or program(s) described in this
+ publication and/or website at any time.
+
+ 2. If this file has been purchased on magnetic or optical media from
+ Unicode, Inc. the sole and exclusive remedy for any claim will be
+ exchange of the defective media within ninety (90) days of original
+ purchase.
+
+ 3. EXCEPT AS PROVIDED IN SECTION C.2, THIS PUBLICATION AND/OR SOFTWARE IS
+ PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND EITHER EXPRESS, IMPLIED,
+ OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT.
+ UNICODE AND ITS LICENSORS ASSUME NO RESPONSIBILITY FOR ERRORS OR
+ OMISSIONS IN THIS PUBLICATION AND/OR SOFTWARE OR OTHER DOCUMENTS WHICH
+ ARE REFERENCED BY OR LINKED TO THIS PUBLICATION OR THE UNICODE WEBSITE.
+
+D. Waiver of Damages. In no event shall Unicode or its licensors be liable for
+ any special, incidental, indirect or consequential damages of any kind, or
+ any damages whatsoever, whether or not Unicode was advised of the
+ possibility of the damage, including, without limitation, those resulting
+ from the following: loss of use, data or profits, in connection with the
+ use, modification or distribution of this information or its derivatives.
+
+E.Trademarks & Logos.
+ 1. The Unicode Word Mark and the Unicode Logo are trademarks of Unicode,
+ Inc. “The Unicode Consortium” and “Unicode, Inc.” are trade names of
+ Unicode, Inc. Use of the information and materials found on this
+ website indicates your acknowledgement of Unicode, Inc.’s exclusive
+ worldwide rights in the Unicode Word Mark, the Unicode Logo, and the
+ Unicode trade names.
+
+ 2. The Unicode Consortium Name and Trademark Usage Policy (“Trademark
+ Policy”) are incorporated herein by reference and you agree to abide by
+ the provisions of the Trademark Policy, which may be changed from time
+ to time in the sole discretion of Unicode, Inc.
+
+ 3. All third party trademarks referenced herein are the property of their
+ respective owners.
+
+Miscellaneous.
+ 1. Jurisdiction and Venue. This server is operated from a location in the
+ State of California, United States of America. Unicode makes no
+ representation that the materials are appropriate for use in other
+ locations. If you access this server from other locations, you are
+ responsible for compliance with local laws. This Agreement, all use of
+ this site and any claims and damages resulting from use of this site are
+ governed solely by the laws of the State of California without regard to
+ any principles which would apply the laws of a different jurisdiction.
+ The user agrees that any disputes regarding this site shall be resolved
+ solely in the courts located in Santa Clara County, California. The user
+ agrees said courts have personal jurisdiction and agree to waive any
+ right to transfer the dispute to any other forum.
+
+ 2. Modification by Unicode. Unicode shall have the right to modify this
+ Agreement at any time by posting it to this site. The user may not
+ assign any part of this Agreement without Unicode’s prior written
+ consent.
+
+ 3. Taxes. The user agrees to pay any taxes arising from access to this
+ website or use of the information herein, except for those based on
+ Unicode’s net income.
+
+ 4. Severability. If any provision of this Agreement is declared invalid or
+ unenforceable, the remaining provisions of this Agreement shall remain
+ in effect.
+
+ 5. Entire Agreement. This Agreement constitutes the entire agreement
+ between the parties.
+
+EXHIBIT 1
+UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE
+
+Unicode Data Files include all data files under the directories
+http://www.unicode.org/Public/, http://www.unicode.org/reports/, and
+http://www.unicode.org/cldr/data/. Unicode Data Files do not include PDF
+online code charts under the directory http://www.unicode.org/Public/.
+Software includes any source code published in the Unicode Standard or under
+the directories http://www.unicode.org/Public/,
+http://www.unicode.org/reports/, and http://www.unicode.org/cldr/data/.
+
+NOTICE TO USER: Carefully read the following legal agreement. BY DOWNLOADING,
+INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S DATA FILES ("DATA
+FILES"), AND/OR SOFTWARE ("SOFTWARE"), YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO
+BE BOUND BY, ALL OF THE TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT
+AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR
+SOFTWARE.
+
+COPYRIGHT AND PERMISSION NOTICE
+
+Copyright © 1991-2012 Unicode, Inc. All rights reserved. Distributed under the
+Terms of Use in http://www.unicode.org/copyright.html.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of the Unicode data files and any associated documentation (the "Data Files")
+or Unicode software and any associated documentation (the "Software") to deal
+in the Data Files or Software without restriction, including without
+limitation the rights to use, copy, modify, merge, publish, distribute, and/or
+sell copies of the Data Files or Software, and to permit persons to whom the
+Data Files or Software are furnished to do so, provided that (a) the above
+copyright notice(s) and this permission notice appear with all copies of the
+Data Files or Software, (b) both the above copyright notice(s) and this
+permission notice appear in associated documentation, and (c) there is clear
+notice in each modified Data File or in the Software as well as in the
+documentation associated with the Data File(s) or Software that the data or
+software has been modified.
+
+THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD
+PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN
+THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL
+DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE
+DATA FILES OR SOFTWARE.
+
+Except as contained in this notice, the name of a copyright holder shall not
+be used in advertising or otherwise to promote the sale, use or other dealings
+in these Data Files or Software without prior written authorization of the
+copyright holder.
+
+Unicode and the Unicode logo are trademarks of Unicode, Inc. in the United
+States and other countries. All third party trademarks referenced herein are
+the property of their respective owners.
+
+--- end of LICENSE ---
+
+-------------------------------------------------------------------------------
+
+%% This notice is provided with respect to UPX v3.01, which may be included
+with JRE 8 on Windows.
+
+--- begin of LICENSE ---
+
+Use of any of this software is governed by the terms of the license below:
+
+
+ ooooo ooo ooooooooo. ooooooo ooooo
+ `888' `8' `888 `Y88. `8888 d8'
+ 888 8 888 .d88' Y888..8P
+ 888 8 888ooo88P' `8888'
+ 888 8 888 .8PY888.
+ `88. .8' 888 d8' `888b
+ `YbodP' o888o o888o o88888o
+
+
+ The Ultimate Packer for eXecutables
+ Copyright (c) 1996-2000 Markus Oberhumer & Laszlo Molnar
+ http://wildsau.idv.uni-linz.ac.at/mfx/upx.html
+ http://www.nexus.hu/upx
+ http://upx.tsx.org
+
+
+PLEASE CAREFULLY READ THIS LICENSE AGREEMENT, ESPECIALLY IF YOU PLAN
+TO MODIFY THE UPX SOURCE CODE OR USE A MODIFIED UPX VERSION.
+
+
+ABSTRACT
+========
+
+ UPX and UCL are copyrighted software distributed under the terms
+ of the GNU General Public License (hereinafter the "GPL").
+
+ The stub which is imbedded in each UPX compressed program is part
+ of UPX and UCL, and contains code that is under our copyright. The
+ terms of the GNU General Public License still apply as compressing
+ a program is a special form of linking with our stub.
+
+ As a special exception we grant the free usage of UPX for all
+ executables, including commercial programs.
+ See below for details and restrictions.
+
+
+COPYRIGHT
+=========
+
+ UPX and UCL are copyrighted software. All rights remain with the authors.
+
+ UPX is Copyright (C) 1996-2000 Markus Franz Xaver Johannes Oberhumer
+ UPX is Copyright (C) 1996-2000 Laszlo Molnar
+
+ UCL is Copyright (C) 1996-2000 Markus Franz Xaver Johannes Oberhumer
+
+
+GNU GENERAL PUBLIC LICENSE
+==========================
+
+ UPX and the UCL library are free software; you can redistribute them
+ and/or modify them 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.
+
+ UPX and UCL are distributed in the hope that they 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.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; see the file COPYING.
+
+
+SPECIAL EXCEPTION FOR COMPRESSED EXECUTABLES
+============================================
+
+ The stub which is imbedded in each UPX compressed program is part
+ of UPX and UCL, and contains code that is under our copyright. The
+ terms of the GNU General Public License still apply as compressing
+ a program is a special form of linking with our stub.
+
+ Hereby Markus F.X.J. Oberhumer and Laszlo Molnar grant you special
+ permission to freely use and distribute all UPX compressed programs
+ (including commercial ones), subject to the following restrictions:
+
+ 1. You must compress your program with a completely unmodified UPX
+ version; either with our precompiled version, or (at your option)
+ with a self compiled version of the unmodified UPX sources as
+ distributed by us.
+ 2. This also implies that the UPX stub must be completely unmodfied, i.e.
+ the stub imbedded in your compressed program must be byte-identical
+ to the stub that is produced by the official unmodified UPX version.
+ 3. The decompressor and any other code from the stub must exclusively get
+ used by the unmodified UPX stub for decompressing your program at
+ program startup. No portion of the stub may get read, copied,
+ called or otherwise get used or accessed by your program.
+
+
+ANNOTATIONS
+===========
+
+ - You can use a modified UPX version or modified UPX stub only for
+ programs that are compatible with the GNU General Public License.
+
+ - We grant you special permission to freely use and distribute all UPX
+ compressed programs. But any modification of the UPX stub (such as,
+ but not limited to, removing our copyright string or making your
+ program non-decompressible) will immediately revoke your right to
+ use and distribute a UPX compressed program.
+
+ - UPX is not a software protection tool; by requiring that you use
+ the unmodified UPX version for your proprietary programs we
+ make sure that any user can decompress your program. This protects
+ both you and your users as nobody can hide malicious code -
+ any program that cannot be decompressed is highly suspicious
+ by definition.
+
+ - You can integrate all or part of UPX and UCL into projects that
+ are compatible with the GNU GPL, but obviously you cannot grant
+ any special exceptions beyond the GPL for our code in your project.
+
+ - We want to actively support manufacturers of virus scanners and
+ similar security software. Please contact us if you would like to
+ incorporate parts of UPX or UCL into such a product.
+
+
+
+Markus F.X.J. Oberhumer Laszlo Molnar
+markus.oberhumer@jk.uni-linz.ac.at ml1050@cdata.tvnet.hu
+
+Linz, Austria, 25 Feb 2000
+
+Additional License(s)
+
+The UPX license file is at http://upx.sourceforge.net/upx-license.html.
+
+--- end of LICENSE ---
+
+-------------------------------------------------------------------------------
+
+%% This notice is provided with respect to Xfree86-VidMode Extension 1.0,
+which may be included with JRE 8, JDK 8, and OpenJDK 8 on Linux and Solaris.
+
+--- begin of LICENSE ---
+
+Version 1.1 of XFree86 ProjectLicence.
+
+Copyright (C) 1994-2004 The XFree86 Project, Inc. All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicence, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so,subject to the following conditions:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice,this list of conditions, and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution, and in the same place
+ and form as other copyright, license and disclaimer information.
+
+ 3. The end-user documentation included with the redistribution, if any,must
+ include the following acknowledgment: "This product includes
+ software developed by The XFree86 Project, Inc (http://www.xfree86.org/) and
+ its contributors", in the same place and form as other third-party
+ acknowledgments. Alternately, this acknowledgment may appear in the software
+ itself, in the same form and location as other such third-party
+ acknowledgments.
+
+ 4. Except as contained in this notice, the name of The XFree86 Project,Inc
+ shall not be used in advertising or otherwise to promote the sale, use
+ or other dealings in this Software without prior written authorization from
+ The XFree86 Project, Inc.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ WARRANTIES,INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ EVENT SHALL THE XFREE86 PROJECT, INC OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL,SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO,PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE.
+
+--- end of LICENSE ---
+
+-------------------------------------------------------------------------------
+
+%% This notice is provided with respect to xwd v1.0.7, which may be
+included with JRE 8, JDK 8, and OpenJDK 8 on Linux and Solaris.
+
+xwd utility
+
+--- begin of LICENSE ---
+
+Copyright 1994 Hewlett-Packard Co.
+Copyright 1996, 1998 The Open Group
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation.
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
+OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of The Open Group shall
+not be used in advertising or otherwise to promote the sale, use or
+other dealings in this Software without prior written authorization
+from The Open Group.
+
+--- end of LICENSE ---
+_____________________________
+Copyright notice for HPkeysym.h:
+/*
+
+Copyright 1987, 1998 The Open Group
+
+All Rights Reserved.
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
+OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of The Open Group shall
+not be used in advertising or otherwise to promote the sale, use or
+other dealings in this Software without prior written authorization
+from The Open Group.
+
+Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts,
+
+All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the names of Hewlett Packard
+or Digital not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE.
+
+HEWLETT-PACKARD MAKES NO WARRANTY OF ANY KIND WITH REGARD
+TO THIS SOFWARE, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. Hewlett-Packard shall not be liable for errors
+contained herein or direct, indirect, special, incidental or
+consequential damages in connection with the furnishing,
+performance, or use of this material.
+
+*/
+
+--- end of LICENSE ---
+
+-------------------------------------------------------------------------------
+
+%% This notice is provided with respect to zlib v1.2.11, which may be included
+with JRE 8, JDK 8, and OpenJDK 8.
+
+--- begin of LICENSE ---
+
+ version 1.2.11, January 15th, 2017
+
+ Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+
+ Jean-loup Gailly Mark Adler
+ jloup@gzip.org madler@alumni.caltech.edu
+
+--- end of LICENSE ---
+
+-------------------------------------------------------------------------------
+
+%% This notice is provided with respect to the following which may be
+included with JRE 8, JDK 8, and OpenJDK 8.
+
+ Apache Commons Math 3.2
+ Apache Derby 10.11.1.2
+ Apache Jakarta BCEL 5.1
+ Apache Santuario XML Security for Java 2.1.3
+ Apache Xalan-Java 2.7.2
+ Apache Xerces Java 2.10.0
+ Apache XML Resolver 1.1
+
+
+--- begin of LICENSE ---
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+--- end of LICENSE ---
+
+-------------------------------------------------------------------------------
+
+%% This notice is provided with respect to OASIS PKCS #11 Cryptographic Token
+Interface v2.40, which may be included with JRE 8, JDK 8, and OpenJDK 8.
+
+--- begin of LICENSE ---
+
+Copyright (c) OASIS Open 2016. All Rights Reserved.
+
+All capitalized terms in the following text have the meanings assigned to them
+in the OASIS Intellectual Property Rights Policy (the "OASIS IPR Policy"). The
+full Policy may be found at the OASIS website:
+[http://www.oasis-open.org/policies-guidelines/ipr]
+
+This document and translations of it may be copied and furnished to others, and
+derivative works that comment on or otherwise explain it or assist in its
+implementation may be prepared, copied, published, and distributed, in whole or
+in part, without restriction of any kind, provided that the above copyright
+notice and this section are included on all such copies and derivative works.
+However, this document itself may not be modified in any way, including by
+removing the copyright notice or references to OASIS, except as needed for the
+purpose of developing any document or deliverable produced by an OASIS
+Technical Committee (in which case the rules applicable to copyrights, as set
+forth in the OASIS IPR Policy, must be followed) or as required to translate it
+into languages other than English.
+
+The limited permissions granted above are perpetual and will not be revoked by
+OASIS or its successors or assigns.
+
+This document and the information contained herein is provided on an "AS IS"
+basis and OASIS DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT
+LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT
+INFRINGE ANY OWNERSHIP RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR
+FITNESS FOR A PARTICULAR PURPOSE. OASIS AND ITS MEMBERS WILL NOT BE LIABLE FOR
+ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE
+OF THIS DOCUMENT OR ANY PART THEREOF.
+
+--- end of LICENSE ---
+
+-------------------------------------------------------------------------------
diff --git a/FCL/src/main/assets/java/bin/java b/FCL/src/main/assets/java/bin/java
new file mode 100644
index 000000000..513aac94e
Binary files /dev/null and b/FCL/src/main/assets/java/bin/java differ
diff --git a/FCL/src/main/assets/java/bin/jjs b/FCL/src/main/assets/java/bin/jjs
new file mode 100644
index 000000000..a303aff5a
Binary files /dev/null and b/FCL/src/main/assets/java/bin/jjs differ
diff --git a/FCL/src/main/assets/java/bin/keytool b/FCL/src/main/assets/java/bin/keytool
new file mode 100644
index 000000000..4de440ec9
Binary files /dev/null and b/FCL/src/main/assets/java/bin/keytool differ
diff --git a/FCL/src/main/assets/java/bin/orbd b/FCL/src/main/assets/java/bin/orbd
new file mode 100644
index 000000000..563cf5fe6
Binary files /dev/null and b/FCL/src/main/assets/java/bin/orbd differ
diff --git a/FCL/src/main/assets/java/bin/pack200 b/FCL/src/main/assets/java/bin/pack200
new file mode 100644
index 000000000..d535cb81d
Binary files /dev/null and b/FCL/src/main/assets/java/bin/pack200 differ
diff --git a/FCL/src/main/assets/java/bin/policytool b/FCL/src/main/assets/java/bin/policytool
new file mode 100644
index 000000000..85b2d90d3
Binary files /dev/null and b/FCL/src/main/assets/java/bin/policytool differ
diff --git a/FCL/src/main/assets/java/bin/rmid b/FCL/src/main/assets/java/bin/rmid
new file mode 100644
index 000000000..2642b82ad
Binary files /dev/null and b/FCL/src/main/assets/java/bin/rmid differ
diff --git a/FCL/src/main/assets/java/bin/rmiregistry b/FCL/src/main/assets/java/bin/rmiregistry
new file mode 100644
index 000000000..56d193224
Binary files /dev/null and b/FCL/src/main/assets/java/bin/rmiregistry differ
diff --git a/FCL/src/main/assets/java/bin/servertool b/FCL/src/main/assets/java/bin/servertool
new file mode 100644
index 000000000..210b95745
Binary files /dev/null and b/FCL/src/main/assets/java/bin/servertool differ
diff --git a/FCL/src/main/assets/java/bin/tnameserv b/FCL/src/main/assets/java/bin/tnameserv
new file mode 100644
index 000000000..18789fb1e
Binary files /dev/null and b/FCL/src/main/assets/java/bin/tnameserv differ
diff --git a/FCL/src/main/assets/java/bin/unpack200 b/FCL/src/main/assets/java/bin/unpack200
new file mode 100644
index 000000000..e3753772f
Binary files /dev/null and b/FCL/src/main/assets/java/bin/unpack200 differ
diff --git a/FCL/src/main/assets/java/lib/aarch64/jli/libjli.so b/FCL/src/main/assets/java/lib/aarch64/jli/libjli.so
new file mode 100644
index 000000000..adb036e10
Binary files /dev/null and b/FCL/src/main/assets/java/lib/aarch64/jli/libjli.so differ
diff --git a/FCL/src/main/assets/java/lib/aarch64/jvm.cfg b/FCL/src/main/assets/java/lib/aarch64/jvm.cfg
new file mode 100644
index 000000000..17c4be37a
--- /dev/null
+++ b/FCL/src/main/assets/java/lib/aarch64/jvm.cfg
@@ -0,0 +1,35 @@
+# Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code 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
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+#
+# List of JVMs that can be used as an option to java, javac, etc.
+# Order is important -- first in this list is the default JVM.
+# NOTE that this both this file and its format are UNSUPPORTED and
+# WILL GO AWAY in a future release.
+#
+# You may also select a JVM in an arbitrary location with the
+# "-XXaltjvm=" option, but that too is unsupported
+# and may not be available in a future release.
+#
+-server KNOWN
+-client IGNORE
diff --git a/FCL/src/main/assets/java/lib/aarch64/libawt.so b/FCL/src/main/assets/java/lib/aarch64/libawt.so
new file mode 100644
index 000000000..1da978901
Binary files /dev/null and b/FCL/src/main/assets/java/lib/aarch64/libawt.so differ
diff --git a/FCL/src/main/assets/java/lib/aarch64/libawt_headless.so b/FCL/src/main/assets/java/lib/aarch64/libawt_headless.so
new file mode 100644
index 000000000..7ee45c94d
Binary files /dev/null and b/FCL/src/main/assets/java/lib/aarch64/libawt_headless.so differ
diff --git a/FCL/src/main/assets/java/lib/aarch64/libawt_xawt.so b/FCL/src/main/assets/java/lib/aarch64/libawt_xawt.so
new file mode 100644
index 000000000..add175f57
Binary files /dev/null and b/FCL/src/main/assets/java/lib/aarch64/libawt_xawt.so differ
diff --git a/FCL/src/main/assets/java/lib/aarch64/libdt_socket.so b/FCL/src/main/assets/java/lib/aarch64/libdt_socket.so
new file mode 100644
index 000000000..905af22f2
Binary files /dev/null and b/FCL/src/main/assets/java/lib/aarch64/libdt_socket.so differ
diff --git a/FCL/src/main/assets/java/lib/aarch64/libfontmanager.so b/FCL/src/main/assets/java/lib/aarch64/libfontmanager.so
new file mode 100644
index 000000000..bf33c1ec6
Binary files /dev/null and b/FCL/src/main/assets/java/lib/aarch64/libfontmanager.so differ
diff --git a/FCL/src/main/assets/java/lib/aarch64/libfreetype.so b/FCL/src/main/assets/java/lib/aarch64/libfreetype.so
new file mode 100644
index 000000000..cde755595
Binary files /dev/null and b/FCL/src/main/assets/java/lib/aarch64/libfreetype.so differ
diff --git a/FCL/src/main/assets/java/lib/aarch64/libhprof.so b/FCL/src/main/assets/java/lib/aarch64/libhprof.so
new file mode 100644
index 000000000..8cfdd6259
Binary files /dev/null and b/FCL/src/main/assets/java/lib/aarch64/libhprof.so differ
diff --git a/FCL/src/main/assets/java/lib/aarch64/libinstrument.so b/FCL/src/main/assets/java/lib/aarch64/libinstrument.so
new file mode 100644
index 000000000..35d628d5b
Binary files /dev/null and b/FCL/src/main/assets/java/lib/aarch64/libinstrument.so differ
diff --git a/FCL/src/main/assets/java/lib/aarch64/libj2gss.so b/FCL/src/main/assets/java/lib/aarch64/libj2gss.so
new file mode 100644
index 000000000..af7dfd347
Binary files /dev/null and b/FCL/src/main/assets/java/lib/aarch64/libj2gss.so differ
diff --git a/FCL/src/main/assets/java/lib/aarch64/libj2pcsc.so b/FCL/src/main/assets/java/lib/aarch64/libj2pcsc.so
new file mode 100644
index 000000000..2682eeaf6
Binary files /dev/null and b/FCL/src/main/assets/java/lib/aarch64/libj2pcsc.so differ
diff --git a/FCL/src/main/assets/java/lib/aarch64/libj2pkcs11.so b/FCL/src/main/assets/java/lib/aarch64/libj2pkcs11.so
new file mode 100644
index 000000000..da2a96b11
Binary files /dev/null and b/FCL/src/main/assets/java/lib/aarch64/libj2pkcs11.so differ
diff --git a/FCL/src/main/assets/java/lib/aarch64/libjaas_unix.so b/FCL/src/main/assets/java/lib/aarch64/libjaas_unix.so
new file mode 100644
index 000000000..785689d85
Binary files /dev/null and b/FCL/src/main/assets/java/lib/aarch64/libjaas_unix.so differ
diff --git a/FCL/src/main/assets/java/lib/aarch64/libjava.so b/FCL/src/main/assets/java/lib/aarch64/libjava.so
new file mode 100644
index 000000000..affa46890
Binary files /dev/null and b/FCL/src/main/assets/java/lib/aarch64/libjava.so differ
diff --git a/FCL/src/main/assets/java/lib/aarch64/libjava_crw_demo.so b/FCL/src/main/assets/java/lib/aarch64/libjava_crw_demo.so
new file mode 100644
index 000000000..3b96c8c90
Binary files /dev/null and b/FCL/src/main/assets/java/lib/aarch64/libjava_crw_demo.so differ
diff --git a/FCL/src/main/assets/java/lib/aarch64/libjawt.so b/FCL/src/main/assets/java/lib/aarch64/libjawt.so
new file mode 100644
index 000000000..0c6aaa89b
Binary files /dev/null and b/FCL/src/main/assets/java/lib/aarch64/libjawt.so differ
diff --git a/FCL/src/main/assets/java/lib/aarch64/libjdwp.so b/FCL/src/main/assets/java/lib/aarch64/libjdwp.so
new file mode 100644
index 000000000..23a7f6551
Binary files /dev/null and b/FCL/src/main/assets/java/lib/aarch64/libjdwp.so differ
diff --git a/FCL/src/main/assets/java/lib/aarch64/libjpeg.so b/FCL/src/main/assets/java/lib/aarch64/libjpeg.so
new file mode 100644
index 000000000..0ab52040a
Binary files /dev/null and b/FCL/src/main/assets/java/lib/aarch64/libjpeg.so differ
diff --git a/FCL/src/main/assets/java/lib/aarch64/libjsdt.so b/FCL/src/main/assets/java/lib/aarch64/libjsdt.so
new file mode 100644
index 000000000..d0181b6e3
Binary files /dev/null and b/FCL/src/main/assets/java/lib/aarch64/libjsdt.so differ
diff --git a/FCL/src/main/assets/java/lib/aarch64/libjsig.so b/FCL/src/main/assets/java/lib/aarch64/libjsig.so
new file mode 100644
index 000000000..f875a1755
Binary files /dev/null and b/FCL/src/main/assets/java/lib/aarch64/libjsig.so differ
diff --git a/FCL/src/main/assets/java/lib/aarch64/libjsound.so b/FCL/src/main/assets/java/lib/aarch64/libjsound.so
new file mode 100644
index 000000000..cc851c181
Binary files /dev/null and b/FCL/src/main/assets/java/lib/aarch64/libjsound.so differ
diff --git a/FCL/src/main/assets/java/lib/aarch64/liblcms.so b/FCL/src/main/assets/java/lib/aarch64/liblcms.so
new file mode 100644
index 000000000..9c5a648bf
Binary files /dev/null and b/FCL/src/main/assets/java/lib/aarch64/liblcms.so differ
diff --git a/FCL/src/main/assets/java/lib/aarch64/libmanagement.so b/FCL/src/main/assets/java/lib/aarch64/libmanagement.so
new file mode 100644
index 000000000..b3f8ae78d
Binary files /dev/null and b/FCL/src/main/assets/java/lib/aarch64/libmanagement.so differ
diff --git a/FCL/src/main/assets/java/lib/aarch64/libmlib_image.so b/FCL/src/main/assets/java/lib/aarch64/libmlib_image.so
new file mode 100644
index 000000000..58c5bba7a
Binary files /dev/null and b/FCL/src/main/assets/java/lib/aarch64/libmlib_image.so differ
diff --git a/FCL/src/main/assets/java/lib/aarch64/libnet.so b/FCL/src/main/assets/java/lib/aarch64/libnet.so
new file mode 100644
index 000000000..caeab07c9
Binary files /dev/null and b/FCL/src/main/assets/java/lib/aarch64/libnet.so differ
diff --git a/FCL/src/main/assets/java/lib/aarch64/libnio.so b/FCL/src/main/assets/java/lib/aarch64/libnio.so
new file mode 100644
index 000000000..eac7204a3
Binary files /dev/null and b/FCL/src/main/assets/java/lib/aarch64/libnio.so differ
diff --git a/FCL/src/main/assets/java/lib/aarch64/libnpt.so b/FCL/src/main/assets/java/lib/aarch64/libnpt.so
new file mode 100644
index 000000000..a85ca35b8
Binary files /dev/null and b/FCL/src/main/assets/java/lib/aarch64/libnpt.so differ
diff --git a/FCL/src/main/assets/java/lib/aarch64/libsctp.so b/FCL/src/main/assets/java/lib/aarch64/libsctp.so
new file mode 100644
index 000000000..373f73bf8
Binary files /dev/null and b/FCL/src/main/assets/java/lib/aarch64/libsctp.so differ
diff --git a/FCL/src/main/assets/java/lib/aarch64/libsunec.so b/FCL/src/main/assets/java/lib/aarch64/libsunec.so
new file mode 100644
index 000000000..01b333d09
Binary files /dev/null and b/FCL/src/main/assets/java/lib/aarch64/libsunec.so differ
diff --git a/FCL/src/main/assets/java/lib/aarch64/libtinyiconv.so b/FCL/src/main/assets/java/lib/aarch64/libtinyiconv.so
new file mode 100644
index 000000000..f62628589
Binary files /dev/null and b/FCL/src/main/assets/java/lib/aarch64/libtinyiconv.so differ
diff --git a/FCL/src/main/assets/java/lib/aarch64/libunpack.so b/FCL/src/main/assets/java/lib/aarch64/libunpack.so
new file mode 100644
index 000000000..9bed36fe0
Binary files /dev/null and b/FCL/src/main/assets/java/lib/aarch64/libunpack.so differ
diff --git a/FCL/src/main/assets/java/lib/aarch64/libverify.so b/FCL/src/main/assets/java/lib/aarch64/libverify.so
new file mode 100644
index 000000000..69bc71dc1
Binary files /dev/null and b/FCL/src/main/assets/java/lib/aarch64/libverify.so differ
diff --git a/FCL/src/main/assets/java/lib/aarch64/libzip.so b/FCL/src/main/assets/java/lib/aarch64/libzip.so
new file mode 100644
index 000000000..d302d0584
Binary files /dev/null and b/FCL/src/main/assets/java/lib/aarch64/libzip.so differ
diff --git a/FCL/src/main/assets/java/lib/aarch64/server/Xusage.txt b/FCL/src/main/assets/java/lib/aarch64/server/Xusage.txt
new file mode 100644
index 000000000..d24ada9ca
--- /dev/null
+++ b/FCL/src/main/assets/java/lib/aarch64/server/Xusage.txt
@@ -0,0 +1,24 @@
+ -Xmixed mixed mode execution (default)
+ -Xint interpreted mode execution only
+ -Xbootclasspath:
+ set search path for bootstrap classes and resources
+ -Xbootclasspath/a:
+ append to end of bootstrap class path
+ -Xbootclasspath/p:
+ prepend in front of bootstrap class path
+ -Xnoclassgc disable class garbage collection
+ -Xincgc enable incremental garbage collection
+ -Xloggc: log GC status to a file with time stamps
+ -Xbatch disable background compilation
+ -Xms set initial Java heap size
+ -Xmx set maximum Java heap size
+ -Xss set java thread stack size
+ -Xprof output cpu profiling data
+ -Xfuture enable strictest checks, anticipating future default
+ -Xrs reduce use of OS signals by Java/VM (see documentation)
+ -Xcheck:jni perform additional checks for JNI functions
+ -Xshare:off do not attempt to use shared class data
+ -Xshare:auto use shared class data if possible (default)
+ -Xshare:on require using shared class data, otherwise fail.
+
+The -X options are non-standard and subject to change without notice.
diff --git a/FCL/src/main/assets/java/lib/aarch64/server/libjvm.so b/FCL/src/main/assets/java/lib/aarch64/server/libjvm.so
new file mode 100644
index 000000000..b599ba161
Binary files /dev/null and b/FCL/src/main/assets/java/lib/aarch64/server/libjvm.so differ
diff --git a/FCL/src/main/assets/java/lib/calendars.properties b/FCL/src/main/assets/java/lib/calendars.properties
new file mode 100644
index 000000000..1196c291b
--- /dev/null
+++ b/FCL/src/main/assets/java/lib/calendars.properties
@@ -0,0 +1,62 @@
+# Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code 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
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+#
+# Japanese imperial calendar
+#
+# Meiji since 1868-01-01 00:00:00 local time (Gregorian)
+# Taisho since 1912-07-30 00:00:00 local time (Gregorian)
+# Showa since 1926-12-25 00:00:00 local time (Gregorian)
+# Heisei since 1989-01-08 00:00:00 local time (Gregorian)
+# Reiwa since 2019-05-01 00:00:00 local time (Gregorian)
+calendar.japanese.type= LocalGregorianCalendar
+calendar.japanese.eras= \
+ name=Meiji,abbr=M,since=-3218832000000; \
+ name=Taisho,abbr=T,since=-1812153600000; \
+ name=Showa,abbr=S,since=-1357603200000; \
+ name=Heisei,abbr=H,since=600220800000; \
+ name=Reiwa,abbr=R,since=1556668800000
+
+#
+# Taiwanese calendar
+# Minguo since 1911-01-01 00:00:00 local time (Gregorian)
+calendar.taiwanese.type= LocalGregorianCalendar
+calendar.taiwanese.eras= \
+ name=MinGuo,since=-1830384000000
+
+#
+# Thai Buddhist calendar
+# Buddhist Era since -542-01-01 00:00:00 local time (Gregorian)
+calendar.thai-buddhist.type= LocalGregorianCalendar
+calendar.thai-buddhist.eras= \
+ name=BuddhistEra,abbr=B.E.,since=-79302585600000
+calendar.thai-buddhist.year-boundary= \
+ day1=4-1,since=-79302585600000; \
+ day1=1-1,since=-915148800000
+
+#
+# Hijrah calendars
+#
+calendar.hijrah.Hijrah-umalqura= hijrah-config-umalqura.properties
+calendar.hijrah.Hijrah-umalqura.type= islamic-umalqura
diff --git a/FCL/src/main/assets/java/lib/charsets.jar b/FCL/src/main/assets/java/lib/charsets.jar
new file mode 100644
index 000000000..f585ab912
Binary files /dev/null and b/FCL/src/main/assets/java/lib/charsets.jar differ
diff --git a/FCL/src/main/assets/java/lib/classlist b/FCL/src/main/assets/java/lib/classlist
new file mode 100644
index 000000000..2a3915c0c
--- /dev/null
+++ b/FCL/src/main/assets/java/lib/classlist
@@ -0,0 +1,2559 @@
+java/lang/Object
+java/lang/String
+java/io/Serializable
+java/lang/Comparable
+java/lang/CharSequence
+java/lang/Class
+java/lang/reflect/GenericDeclaration
+java/lang/reflect/AnnotatedElement
+java/lang/reflect/Type
+java/lang/Cloneable
+java/lang/ClassLoader
+java/lang/System
+java/lang/Throwable
+java/lang/Error
+java/lang/ThreadDeath
+java/lang/Exception
+java/lang/RuntimeException
+java/lang/SecurityManager
+java/security/ProtectionDomain
+java/security/AccessControlContext
+java/security/SecureClassLoader
+java/lang/ClassNotFoundException
+java/lang/ReflectiveOperationException
+java/lang/NoClassDefFoundError
+java/lang/LinkageError
+java/lang/ClassCastException
+java/lang/ArrayStoreException
+java/lang/VirtualMachineError
+java/lang/OutOfMemoryError
+java/lang/StackOverflowError
+java/lang/IllegalMonitorStateException
+java/lang/ref/Reference
+java/lang/ref/SoftReference
+java/lang/ref/WeakReference
+java/lang/ref/FinalReference
+java/lang/ref/PhantomReference
+sun/misc/Cleaner
+java/lang/ref/Finalizer
+java/lang/Thread
+java/lang/Runnable
+java/lang/ThreadGroup
+java/lang/Thread$UncaughtExceptionHandler
+java/util/Properties
+java/util/Hashtable
+java/util/Map
+java/util/Dictionary
+java/lang/reflect/AccessibleObject
+java/lang/reflect/Field
+java/lang/reflect/Member
+java/lang/reflect/Parameter
+java/lang/reflect/Method
+java/lang/reflect/Executable
+java/lang/reflect/Constructor
+sun/reflect/MagicAccessorImpl
+sun/reflect/MethodAccessorImpl
+sun/reflect/MethodAccessor
+sun/reflect/ConstructorAccessorImpl
+sun/reflect/ConstructorAccessor
+sun/reflect/DelegatingClassLoader
+sun/reflect/ConstantPool
+sun/reflect/UnsafeStaticFieldAccessorImpl
+sun/reflect/UnsafeFieldAccessorImpl
+sun/reflect/FieldAccessorImpl
+sun/reflect/FieldAccessor
+sun/reflect/CallerSensitive
+java/lang/annotation/Annotation
+java/lang/invoke/DirectMethodHandle
+java/lang/invoke/MethodHandle
+java/lang/invoke/MemberName
+java/lang/invoke/MethodHandleNatives
+java/lang/invoke/LambdaForm
+java/lang/invoke/MethodType
+java/lang/BootstrapMethodError
+java/lang/invoke/CallSite
+java/lang/invoke/ConstantCallSite
+java/lang/invoke/MutableCallSite
+java/lang/invoke/VolatileCallSite
+java/lang/StringBuffer
+java/lang/AbstractStringBuilder
+java/lang/Appendable
+java/lang/StringBuilder
+sun/misc/Unsafe
+java/io/ByteArrayInputStream
+java/io/InputStream
+java/io/Closeable
+java/lang/AutoCloseable
+java/io/File
+java/net/URLClassLoader
+java/net/URL
+java/util/jar/Manifest
+sun/misc/Launcher
+sun/misc/Launcher$AppClassLoader
+sun/misc/Launcher$ExtClassLoader
+java/security/CodeSource
+java/lang/StackTraceElement
+java/nio/Buffer
+java/lang/Boolean
+java/lang/Character
+java/lang/Float
+java/lang/Number
+java/lang/Double
+java/lang/Byte
+java/lang/Short
+java/lang/Integer
+java/lang/Long
+java/lang/NullPointerException
+java/lang/ArithmeticException
+java/io/ObjectStreamField
+java/lang/String$CaseInsensitiveComparator
+java/util/Comparator
+java/lang/RuntimePermission
+java/security/BasicPermission
+java/security/Permission
+java/security/Guard
+java/security/AccessController
+java/lang/reflect/ReflectPermission
+sun/reflect/ReflectionFactory$GetReflectionFactoryAction
+java/security/PrivilegedAction
+java/security/cert/Certificate
+java/util/Vector
+java/util/List
+java/util/Collection
+java/lang/Iterable
+java/util/RandomAccess
+java/util/AbstractList
+java/util/AbstractCollection
+java/util/Stack
+sun/reflect/ReflectionFactory
+java/lang/ref/Reference$Lock
+java/lang/ref/Reference$ReferenceHandler
+java/lang/ref/ReferenceQueue
+java/lang/ref/ReferenceQueue$Null
+java/lang/ref/ReferenceQueue$Lock
+java/lang/ref/Finalizer$FinalizerThread
+sun/misc/VM
+java/util/Hashtable$Entry
+java/util/Map$Entry
+java/lang/Math
+java/nio/charset/Charset
+sun/nio/cs/StandardCharsets
+sun/nio/cs/FastCharsetProvider
+java/nio/charset/spi/CharsetProvider
+sun/nio/cs/StandardCharsets$Aliases
+sun/util/PreHashedMap
+java/util/AbstractMap
+sun/nio/cs/StandardCharsets$Classes
+sun/nio/cs/StandardCharsets$Cache
+java/lang/ThreadLocal
+java/util/concurrent/atomic/AtomicInteger
+java/lang/NoSuchMethodError
+java/lang/IncompatibleClassChangeError
+java/util/ArrayList
+java/util/Collections
+java/util/Collections$EmptySet
+java/util/AbstractSet
+java/util/Set
+java/util/Collections$EmptyList
+java/util/Collections$EmptyMap
+java/util/Collections$UnmodifiableRandomAccessList
+java/util/Collections$UnmodifiableList
+java/util/Collections$UnmodifiableCollection
+sun/reflect/Reflection
+java/util/HashMap
+java/util/HashMap$Node
+java/lang/Class$3
+java/lang/Class$ReflectionData
+java/lang/Class$Atomic
+sun/reflect/generics/repository/ClassRepository
+sun/reflect/generics/repository/GenericDeclRepository
+sun/reflect/generics/repository/AbstractRepository
+java/lang/Class$AnnotationData
+sun/reflect/annotation/AnnotationType
+java/lang/ClassValue$ClassValueMap
+java/util/WeakHashMap
+java/lang/reflect/Modifier
+java/lang/reflect/ReflectAccess
+sun/reflect/LangReflectAccess
+java/util/Arrays
+sun/nio/cs/UTF_8
+sun/nio/cs/Unicode
+sun/nio/cs/HistoricallyNamedCharset
+java/lang/Class$1
+sun/reflect/ReflectionFactory$1
+sun/reflect/NativeConstructorAccessorImpl
+sun/reflect/DelegatingConstructorAccessorImpl
+java/lang/StringCoding
+java/lang/ThreadLocal$ThreadLocalMap
+java/lang/ThreadLocal$ThreadLocalMap$Entry
+java/lang/StringCoding$StringDecoder
+sun/nio/cs/UTF_8$Decoder
+sun/nio/cs/ArrayDecoder
+java/nio/charset/CharsetDecoder
+java/nio/charset/CodingErrorAction
+java/util/Hashtable$EntrySet
+java/util/Collections$SynchronizedSet
+java/util/Collections$SynchronizedCollection
+java/util/Objects
+java/util/Hashtable$Enumerator
+java/util/Enumeration
+java/util/Iterator
+java/lang/Runtime
+sun/misc/Version
+java/io/FileInputStream
+java/io/FileDescriptor
+java/io/FileDescriptor$1
+sun/misc/JavaIOFileDescriptorAccess
+sun/misc/SharedSecrets
+java/io/FileOutputStream
+java/io/OutputStream
+java/io/Flushable
+java/io/BufferedInputStream
+java/io/FilterInputStream
+java/util/concurrent/atomic/AtomicReferenceFieldUpdater
+java/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl
+java/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl$1
+java/security/PrivilegedExceptionAction
+sun/reflect/misc/ReflectUtil
+java/io/PrintStream
+java/io/FilterOutputStream
+java/io/BufferedOutputStream
+java/io/OutputStreamWriter
+java/io/Writer
+sun/nio/cs/StreamEncoder
+sun/security/action/GetPropertyAction
+sun/nio/cs/UTF_8$Encoder
+sun/nio/cs/ArrayEncoder
+java/nio/charset/CharsetEncoder
+java/nio/ByteBuffer
+java/nio/HeapByteBuffer
+java/nio/Bits
+java/nio/ByteOrder
+java/nio/Bits$1
+sun/misc/JavaNioAccess
+java/io/BufferedWriter
+java/io/DefaultFileSystem
+java/io/UnixFileSystem
+java/io/FileSystem
+java/io/ExpiringCache
+java/io/ExpiringCache$1
+java/util/LinkedHashMap
+java/io/File$PathStatus
+java/lang/Enum
+java/nio/file/Path
+java/nio/file/Watchable
+java/lang/StringCoding$StringEncoder
+java/lang/ClassLoader$3
+java/io/ExpiringCache$Entry
+java/util/LinkedHashMap$Entry
+java/lang/ClassLoader$NativeLibrary
+java/lang/Terminator
+java/lang/Terminator$1
+sun/misc/SignalHandler
+sun/misc/Signal
+sun/misc/NativeSignalHandler
+java/lang/Integer$IntegerCache
+sun/misc/OSEnvironment
+java/lang/System$2
+sun/misc/JavaLangAccess
+java/lang/IllegalArgumentException
+java/lang/Compiler
+java/lang/Compiler$1
+sun/misc/Launcher$Factory
+java/net/URLStreamHandlerFactory
+sun/security/util/Debug
+java/lang/ClassLoader$ParallelLoaders
+java/util/WeakHashMap$Entry
+java/util/Collections$SetFromMap
+java/util/WeakHashMap$KeySet
+java/net/URLClassLoader$7
+sun/misc/JavaNetAccess
+java/util/StringTokenizer
+sun/misc/Launcher$ExtClassLoader$1
+sun/misc/MetaIndex
+java/io/BufferedReader
+java/io/Reader
+java/lang/Readable
+java/io/FileReader
+java/io/InputStreamReader
+sun/nio/cs/StreamDecoder
+java/nio/CharBuffer
+java/nio/HeapCharBuffer
+java/nio/charset/CoderResult
+java/nio/charset/CoderResult$1
+java/nio/charset/CoderResult$Cache
+java/nio/charset/CoderResult$2
+java/lang/reflect/Array
+java/io/FileInputStream$1
+sun/net/www/ParseUtil
+java/util/BitSet
+java/util/Locale
+java/util/Locale$Cache
+sun/util/locale/LocaleObjectCache
+java/util/concurrent/ConcurrentHashMap
+java/util/concurrent/ConcurrentMap
+java/util/concurrent/ConcurrentHashMap$Segment
+java/util/concurrent/locks/ReentrantLock
+java/util/concurrent/locks/Lock
+java/util/concurrent/ConcurrentHashMap$Node
+java/util/concurrent/ConcurrentHashMap$CounterCell
+java/util/concurrent/ConcurrentHashMap$KeySetView
+java/util/concurrent/ConcurrentHashMap$CollectionView
+java/util/concurrent/ConcurrentHashMap$ValuesView
+java/util/concurrent/ConcurrentHashMap$EntrySetView
+sun/util/locale/BaseLocale
+sun/util/locale/BaseLocale$Cache
+sun/util/locale/BaseLocale$Key
+sun/util/locale/LocaleObjectCache$CacheEntry
+java/util/Locale$LocaleKey
+sun/util/locale/LocaleUtils
+java/lang/CharacterData
+java/lang/CharacterDataLatin1
+java/net/Parts
+sun/net/www/protocol/file/Handler
+java/net/URLStreamHandler
+java/util/HashMap$TreeNode
+java/security/ProtectionDomain$JavaSecurityAccessImpl
+sun/misc/JavaSecurityAccess
+java/security/ProtectionDomain$2
+sun/misc/JavaSecurityProtectionDomainAccess
+java/security/ProtectionDomain$Key
+java/security/Principal
+java/util/HashSet
+sun/misc/URLClassPath
+sun/net/www/protocol/jar/Handler
+sun/misc/Launcher$AppClassLoader$1
+java/lang/SystemClassLoaderAction
+java/lang/invoke/MethodHandleImpl
+java/lang/invoke/MethodHandleImpl$1
+java/lang/invoke/MethodHandleImpl$2
+java/util/function/Function
+java/lang/invoke/MethodHandleImpl$3
+java/lang/invoke/MethodHandleImpl$4
+java/lang/ClassValue
+java/lang/ClassValue$Entry
+java/lang/ClassValue$Identity
+java/lang/ClassValue$Version
+java/lang/invoke/MemberName$Factory
+java/lang/invoke/MethodHandleStatics
+java/lang/invoke/MethodHandleStatics$1
+sun/misc/PostVMInitHook
+sun/usagetracker/UsageTrackerClient
+java/util/concurrent/atomic/AtomicBoolean
+sun/usagetracker/UsageTrackerClient$1
+sun/usagetracker/UsageTrackerClient$4
+sun/usagetracker/UsageTrackerClient$3
+java/io/FileOutputStream$1
+sun/launcher/LauncherHelper
+java/net/URLClassLoader$1
+sun/net/util/URLUtil
+sun/misc/URLClassPath$3
+sun/misc/URLClassPath$JarLoader
+sun/misc/URLClassPath$Loader
+java/util/zip/ZipFile
+java/util/zip/ZipConstants
+java/util/zip/ZipFile$1
+sun/misc/JavaUtilZipFileAccess
+sun/misc/URLClassPath$JarLoader$1
+sun/misc/FileURLMapper
+java/util/jar/JarFile
+java/util/jar/JavaUtilJarAccessImpl
+sun/misc/JavaUtilJarAccess
+java/nio/charset/StandardCharsets
+sun/nio/cs/US_ASCII
+sun/nio/cs/ISO_8859_1
+sun/nio/cs/UTF_16BE
+sun/nio/cs/UTF_16LE
+sun/nio/cs/UTF_16
+java/util/ArrayDeque
+java/util/Deque
+java/util/Queue
+java/util/zip/ZipCoder
+sun/misc/PerfCounter
+sun/misc/Perf$GetPerfAction
+sun/misc/Perf
+sun/misc/PerfCounter$CoreCounters
+sun/nio/ch/DirectBuffer
+java/nio/DirectByteBuffer
+java/nio/MappedByteBuffer
+java/nio/DirectLongBufferU
+java/nio/LongBuffer
+sun/misc/JarIndex
+sun/misc/ExtensionDependency
+java/util/zip/ZipEntry
+java/util/jar/JarFile$JarFileEntry
+java/util/jar/JarEntry
+java/util/zip/ZipFile$ZipFileInputStream
+java/util/zip/Inflater
+java/util/zip/ZStreamRef
+java/util/zip/ZipFile$ZipFileInflaterInputStream
+java/util/zip/InflaterInputStream
+sun/misc/IOUtils
+sun/misc/URLClassPath$JarLoader$2
+sun/misc/Resource
+sun/nio/ByteBuffered
+java/security/Permissions
+java/security/PermissionCollection
+sun/net/www/protocol/file/FileURLConnection
+sun/net/www/URLConnection
+java/net/URLConnection
+sun/net/www/MessageHeader
+java/io/FilePermission
+java/io/FilePermission$1
+java/io/FilePermissionCollection
+java/security/AllPermission
+java/security/UnresolvedPermission
+java/security/BasicPermissionCollection
+javax/swing/JLabel
+javax/swing/SwingConstants
+javax/accessibility/Accessible
+javax/swing/JComponent
+javax/swing/TransferHandler$HasGetTransferHandler
+java/awt/Container
+java/awt/Component
+java/awt/image/ImageObserver
+java/awt/MenuContainer
+sun/launcher/LauncherHelper$FXHelper
+java/lang/Class$MethodArray
+java/lang/InterruptedException
+javax/swing/JFrame
+javax/swing/WindowConstants
+javax/swing/RootPaneContainer
+java/awt/Frame
+java/awt/Window
+java/util/concurrent/ConcurrentHashMap$ForwardingNode
+java/awt/Graphics
+java/lang/Void
+sun/util/logging/PlatformLogger
+sun/util/logging/PlatformLogger$Level
+sun/util/logging/PlatformLogger$1
+sun/util/logging/PlatformLogger$DefaultLoggerProxy
+sun/util/logging/PlatformLogger$LoggerProxy
+sun/util/logging/PlatformLogger$JavaLoggerProxy
+sun/util/logging/LoggingSupport
+sun/util/logging/LoggingSupport$1
+java/util/logging/LoggingProxyImpl
+sun/util/logging/LoggingProxy
+sun/reflect/UnsafeFieldAccessorFactory
+sun/reflect/UnsafeQualifiedStaticObjectFieldAccessorImpl
+sun/reflect/UnsafeQualifiedStaticFieldAccessorImpl
+java/util/HashMap$EntrySet
+java/util/HashMap$EntryIterator
+java/util/HashMap$HashIterator
+sun/util/logging/LoggingSupport$2
+java/util/Date
+sun/util/calendar/CalendarSystem
+sun/util/calendar/Gregorian
+sun/util/calendar/BaseCalendar
+sun/util/calendar/AbstractCalendar
+java/awt/Component$AWTTreeLock
+java/awt/Toolkit
+java/awt/Toolkit$4
+sun/awt/AWTAccessor$ToolkitAccessor
+sun/awt/AWTAccessor
+java/awt/Toolkit$5
+sun/util/CoreResourceBundleControl
+java/util/ResourceBundle$Control
+java/util/Arrays$ArrayList
+java/util/ResourceBundle$Control$CandidateListCache
+java/util/ResourceBundle
+java/util/ResourceBundle$1
+java/util/spi/ResourceBundleControlProvider
+java/util/ServiceLoader
+java/util/ServiceLoader$LazyIterator
+java/util/ServiceLoader$1
+java/util/LinkedHashMap$LinkedEntrySet
+java/util/LinkedHashMap$LinkedEntryIterator
+java/util/LinkedHashMap$LinkedHashIterator
+sun/misc/Launcher$BootClassPathHolder
+sun/misc/Launcher$BootClassPathHolder$1
+sun/misc/URLClassPath$2
+java/lang/ClassLoader$2
+sun/misc/URLClassPath$1
+java/net/URLClassLoader$3
+sun/misc/CompoundEnumeration
+java/io/FileNotFoundException
+java/io/IOException
+java/security/PrivilegedActionException
+java/net/URLClassLoader$3$1
+java/util/ResourceBundle$RBClassLoader
+java/util/ResourceBundle$RBClassLoader$1
+java/util/ResourceBundle$CacheKey
+java/util/ResourceBundle$LoaderReference
+java/util/ResourceBundle$CacheKeyReference
+java/util/ResourceBundle$SingleFormatControl
+java/util/LinkedList
+java/util/AbstractSequentialList
+java/util/LinkedList$Node
+sun/awt/resources/awt
+java/util/ListResourceBundle
+java/awt/Toolkit$3
+java/awt/GraphicsEnvironment
+java/lang/invoke/LambdaMetafactory
+java/lang/invoke/MethodHandles$Lookup
+java/lang/invoke/MethodType$ConcurrentWeakInternSet
+java/lang/invoke/MethodTypeForm
+java/lang/invoke/Invokers
+java/lang/invoke/MethodType$ConcurrentWeakInternSet$WeakEntry
+java/lang/invoke/MethodHandles
+sun/invoke/util/Wrapper
+sun/invoke/util/Wrapper$Format
+java/lang/Byte$ByteCache
+java/lang/Short$ShortCache
+java/lang/Character$CharacterCache
+java/lang/Long$LongCache
+sun/invoke/util/VerifyAccess
+sun/invoke/util/ValueConversions
+java/lang/NoSuchMethodException
+java/lang/invoke/LambdaForm$BasicType
+java/lang/invoke/LambdaForm$Name
+java/lang/invoke/LambdaForm$NamedFunction
+java/lang/invoke/SimpleMethodHandle
+java/lang/invoke/BoundMethodHandle
+java/lang/invoke/BoundMethodHandle$SpeciesData
+java/lang/invoke/BoundMethodHandle$Factory
+java/lang/invoke/BoundMethodHandle$Species_L
+java/util/HashMap$Values
+java/util/HashMap$ValueIterator
+sun/invoke/util/BytecodeDescriptor
+java/lang/invoke/DirectMethodHandle$Lazy
+java/lang/InstantiationException
+java/util/Collections$UnmodifiableCollection$1
+java/util/AbstractList$Itr
+java/lang/invoke/InvokerBytecodeGenerator
+jdk/internal/org/objectweb/asm/ClassWriter
+jdk/internal/org/objectweb/asm/ClassVisitor
+jdk/internal/org/objectweb/asm/ByteVector
+jdk/internal/org/objectweb/asm/Item
+jdk/internal/org/objectweb/asm/MethodWriter
+jdk/internal/org/objectweb/asm/MethodVisitor
+jdk/internal/org/objectweb/asm/Type
+jdk/internal/org/objectweb/asm/Label
+jdk/internal/org/objectweb/asm/Frame
+jdk/internal/org/objectweb/asm/AnnotationWriter
+jdk/internal/org/objectweb/asm/AnnotationVisitor
+java/lang/invoke/MethodHandleImpl$Intrinsic
+java/lang/invoke/InvokerBytecodeGenerator$2
+sun/invoke/util/VerifyType
+sun/invoke/empty/Empty
+java/lang/NoSuchFieldException
+java/lang/invoke/InvokerBytecodeGenerator$CpPatch
+java/lang/invoke/DirectMethodHandle$Accessor
+java/util/ArrayList$Itr
+java/util/RandomAccessSubList
+java/util/SubList
+java/util/SubList$1
+java/util/ListIterator
+java/util/AbstractList$ListItr
+java/lang/invoke/MethodHandleImpl$AsVarargsCollector
+java/lang/invoke/DelegatingMethodHandle
+java/lang/invoke/WrongMethodTypeException
+java/lang/invoke/MethodHandleImpl$Lazy
+java/lang/invoke/MethodHandleImpl$IntrinsicMethodHandle
+java/lang/NoSuchFieldError
+java/lang/IllegalAccessException
+java/lang/invoke/LambdaFormEditor
+java/lang/invoke/LambdaFormEditor$Transform$Kind
+java/lang/invoke/LambdaFormEditor$Transform
+java/lang/invoke/LambdaFormBuffer
+jdk/internal/org/objectweb/asm/FieldWriter
+jdk/internal/org/objectweb/asm/FieldVisitor
+java/lang/invoke/InnerClassLambdaMetafactory
+java/lang/invoke/AbstractValidatingLambdaMetafactory
+java/util/PropertyPermission
+java/security/AccessController$1
+sun/security/util/SecurityConstants
+java/net/NetPermission
+java/security/SecurityPermission
+java/net/SocketPermission
+sun/security/action/GetBooleanAction
+java/security/AllPermissionCollection
+java/lang/invoke/InfoFromMemberName
+java/lang/invoke/MethodHandleInfo
+java/lang/invoke/InnerClassLambdaMetafactory$ForwardingMethodGenerator
+java/lang/invoke/TypeConvertingMethodAdapter
+java/lang/invoke/InnerClassLambdaMetafactory$1
+java/lang/ProcessEnvironment
+java/lang/ProcessEnvironment$Variable
+java/lang/ProcessEnvironment$ExternalData
+java/lang/ProcessEnvironment$Value
+java/lang/ProcessEnvironment$StringEnvironment
+java/util/Collections$UnmodifiableMap
+java/awt/Toolkit$1
+java/awt/event/KeyEvent
+java/awt/event/InputEvent
+java/awt/event/ComponentEvent
+java/awt/AWTEvent
+java/util/EventObject
+java/awt/AWTEvent$1
+sun/awt/AWTAccessor$AWTEventAccessor
+java/awt/event/NativeLibLoader
+java/awt/event/NativeLibLoader$1
+java/awt/event/InputEvent$1
+sun/awt/AWTAccessor$InputEventAccessor
+java/awt/event/KeyEvent$1
+sun/awt/AWTAccessor$KeyEventAccessor
+java/awt/Component$1
+sun/awt/AWTAccessor$ComponentAccessor
+java/awt/Component$DummyRequestFocusController
+sun/awt/RequestFocusController
+java/awt/LayoutManager
+java/awt/LightweightDispatcher
+java/awt/event/AWTEventListener
+java/util/EventListener
+java/awt/Dimension
+java/awt/geom/Dimension2D
+java/awt/Container$1
+sun/awt/AWTAccessor$ContainerAccessor
+javax/swing/JComponent$1
+java/awt/ComponentOrientation
+java/awt/Component$3
+sun/awt/AppContext
+java/util/IdentityHashMap
+java/util/Collections$SynchronizedMap
+sun/awt/AppContext$GetAppContextLock
+sun/awt/AppContext$6
+sun/misc/JavaAWTAccess
+sun/awt/AppContext$3
+sun/awt/AppContext$2
+sun/awt/SunToolkit
+sun/awt/WindowClosingSupport
+sun/awt/WindowClosingListener
+sun/awt/ComponentFactory
+sun/awt/InputMethodSupport
+sun/awt/KeyboardFocusManagerPeerProvider
+java/util/concurrent/locks/ReentrantLock$NonfairSync
+java/util/concurrent/locks/ReentrantLock$Sync
+java/util/concurrent/locks/AbstractQueuedSynchronizer
+java/util/concurrent/locks/AbstractOwnableSynchronizer
+java/util/concurrent/locks/AbstractQueuedSynchronizer$Node
+java/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject
+java/util/concurrent/locks/Condition
+sun/misc/SoftCache
+sun/awt/AppContext$State
+sun/awt/AppContext$1
+java/awt/EventQueue
+java/awt/EventQueue$1
+java/awt/EventQueue$2
+sun/awt/AWTAccessor$EventQueueAccessor
+java/awt/Queue
+sun/awt/MostRecentKeyValue
+sun/awt/PostEventQueue
+javax/swing/event/EventListenerList
+javax/swing/SwingUtilities
+javax/swing/RepaintManager
+javax/swing/RepaintManager$DisplayChangedHandler
+sun/awt/DisplayChangedListener
+javax/swing/RepaintManager$1
+sun/swing/SwingAccessor$RepaintManagerAccessor
+sun/swing/SwingAccessor
+sun/awt/X11GraphicsEnvironment
+sun/java2d/SunGraphicsEnvironment
+sun/awt/X11GraphicsEnvironment$1
+sun/awt/X11/XErrorHandlerUtil
+sun/awt/X11/XlibWrapper
+sun/java2d/UnixSurfaceManagerFactory
+sun/java2d/SurfaceManagerFactory
+sun/awt/SunDisplayChanger
+sun/java2d/SunGraphicsEnvironment$1
+sun/misc/FloatingDecimal
+sun/misc/FloatingDecimal$ExceptionalBinaryToASCIIBuffer
+sun/misc/FloatingDecimal$BinaryToASCIIConverter
+sun/misc/FloatingDecimal$BinaryToASCIIBuffer
+sun/misc/FloatingDecimal$1
+sun/misc/FloatingDecimal$PreparedASCIIToBinaryBuffer
+sun/misc/FloatingDecimal$ASCIIToBinaryConverter
+java/lang/NumberFormatException
+java/lang/StringIndexOutOfBoundsException
+java/lang/IndexOutOfBoundsException
+java/awt/Font
+java/awt/Font$FontAccessImpl
+sun/font/FontAccess
+java/awt/geom/AffineTransform
+sun/font/AttributeValues
+sun/font/EAttribute
+java/text/AttributedCharacterIterator$Attribute
+java/lang/Class$4
+sun/reflect/NativeMethodAccessorImpl
+sun/reflect/DelegatingMethodAccessorImpl
+java/awt/font/TextAttribute
+java/awt/Toolkit$2
+sun/awt/X11/XToolkit
+sun/awt/UNIXToolkit
+java/util/TreeMap
+java/util/NavigableMap
+java/util/SortedMap
+java/awt/GraphicsDevice
+sun/awt/X11GraphicsDevice
+sun/awt/X11GraphicsConfig
+sun/awt/image/SurfaceManager$ProxiedGraphicsConfig
+java/awt/GraphicsConfiguration
+java/awt/ImageCapabilities
+sun/java2d/x11/X11SurfaceData
+sun/java2d/x11/XSurfaceData
+sun/java2d/SurfaceData
+java/awt/Transparency
+sun/java2d/DisposerTarget
+sun/java2d/StateTrackable
+sun/java2d/Surface
+sun/java2d/InvalidPipeException
+java/lang/IllegalStateException
+sun/java2d/NullSurfaceData
+sun/java2d/StateTrackable$State
+sun/java2d/loops/SurfaceType
+sun/awt/image/PixelConverter
+sun/awt/image/PixelConverter$Xrgb
+sun/awt/image/PixelConverter$Argb
+sun/awt/image/PixelConverter$ArgbPre
+sun/awt/image/PixelConverter$Xbgr
+sun/awt/image/PixelConverter$Rgba
+sun/awt/image/PixelConverter$RgbaPre
+sun/awt/image/PixelConverter$Ushort565Rgb
+sun/awt/image/PixelConverter$Ushort555Rgb
+sun/awt/image/PixelConverter$Ushort555Rgbx
+sun/awt/image/PixelConverter$Ushort4444Argb
+sun/awt/image/PixelConverter$ByteGray
+sun/awt/image/PixelConverter$UshortGray
+sun/awt/image/PixelConverter$Rgbx
+sun/awt/image/PixelConverter$Bgrx
+sun/awt/image/PixelConverter$ArgbBm
+java/awt/image/ColorModel
+java/awt/image/ColorModel$1
+java/awt/image/DirectColorModel
+java/awt/image/PackedColorModel
+java/awt/color/ColorSpace
+java/awt/color/ICC_Profile
+sun/java2d/cmm/ProfileDeferralInfo
+sun/java2d/cmm/ProfileDeferralMgr
+java/awt/color/ICC_ProfileRGB
+java/awt/color/ICC_Profile$1
+sun/java2d/cmm/ProfileActivator
+java/awt/color/ICC_ColorSpace
+sun/java2d/StateTrackableDelegate
+sun/java2d/StateTrackableDelegate$2
+sun/java2d/pipe/NullPipe
+sun/java2d/pipe/PixelDrawPipe
+sun/java2d/pipe/PixelFillPipe
+sun/java2d/pipe/ShapeDrawPipe
+sun/java2d/pipe/TextPipe
+sun/java2d/pipe/DrawImagePipe
+java/awt/image/IndexColorModel
+sun/java2d/pipe/LoopPipe
+sun/java2d/pipe/ParallelogramPipe
+sun/java2d/pipe/LoopBasedPipe
+sun/java2d/pipe/RenderingEngine
+sun/java2d/pipe/RenderingEngine$1
+sun/dc/DuctusRenderingEngine
+sun/java2d/pipe/OutlineTextRenderer
+sun/java2d/pipe/SolidTextRenderer
+sun/java2d/pipe/GlyphListLoopPipe
+sun/java2d/pipe/GlyphListPipe
+sun/java2d/pipe/AATextRenderer
+sun/java2d/pipe/LCDTextRenderer
+sun/java2d/pipe/AlphaColorPipe
+sun/java2d/pipe/CompositePipe
+sun/java2d/SurfaceData$PixelToShapeLoopConverter
+sun/java2d/pipe/PixelToShapeConverter
+sun/java2d/SurfaceData$PixelToPgramLoopConverter
+sun/java2d/pipe/PixelToParallelogramConverter
+sun/java2d/pipe/TextRenderer
+sun/java2d/pipe/SpanClipRenderer
+sun/java2d/pipe/Region
+sun/java2d/pipe/RegionIterator
+sun/java2d/pipe/Region$ImmutableRegion
+sun/java2d/pipe/AAShapePipe
+sun/java2d/pipe/AlphaPaintPipe
+sun/java2d/pipe/SpanShapeRenderer$Composite
+sun/java2d/pipe/SpanShapeRenderer
+sun/java2d/pipe/GeneralCompositePipe
+sun/java2d/pipe/DrawImage
+sun/java2d/loops/RenderCache
+sun/java2d/loops/RenderCache$Entry
+sun/java2d/loops/XORComposite
+java/awt/Composite
+sun/font/X11TextRenderer
+sun/java2d/loops/GraphicsPrimitive
+sun/java2d/x11/X11PMBlitLoops
+sun/java2d/loops/Blit
+sun/java2d/loops/GraphicsPrimitiveMgr
+sun/java2d/loops/CompositeType
+sun/java2d/SunGraphics2D
+sun/awt/ConstrainableGraphics
+sun/java2d/DestSurfaceProvider
+java/awt/Graphics2D
+java/awt/Color
+java/awt/Paint
+java/awt/AlphaComposite
+java/awt/geom/Path2D
+java/awt/Shape
+java/awt/geom/Path2D$Float
+sun/awt/SunHints
+sun/java2d/loops/BlitBg
+sun/java2d/loops/ScaledBlit
+sun/java2d/loops/FillRect
+sun/java2d/loops/FillSpans
+sun/java2d/loops/FillParallelogram
+sun/java2d/loops/DrawParallelogram
+sun/java2d/loops/DrawLine
+sun/java2d/loops/DrawRect
+sun/java2d/loops/DrawPolygons
+sun/java2d/loops/DrawPath
+sun/java2d/loops/FillPath
+sun/java2d/loops/MaskBlit
+sun/java2d/loops/MaskFill
+sun/java2d/loops/DrawGlyphList
+sun/java2d/loops/DrawGlyphListAA
+sun/java2d/loops/DrawGlyphListLCD
+sun/java2d/loops/TransformHelper
+java/awt/BasicStroke
+java/awt/Stroke
+sun/misc/PerformanceLogger
+sun/misc/PerformanceLogger$TimeData
+sun/java2d/pipe/ValidatePipe
+sun/awt/SunHints$Key
+java/awt/RenderingHints$Key
+sun/awt/SunHints$Value
+sun/awt/SunHints$LCDContrastKey
+sun/java2d/loops/CustomComponent
+sun/java2d/loops/GraphicsPrimitiveProxy
+sun/java2d/loops/GeneralRenderer
+sun/java2d/loops/GraphicsPrimitiveMgr$1
+sun/java2d/loops/GraphicsPrimitiveMgr$2
+sun/java2d/x11/X11PMBlitLoops$DelegateBlitLoop
+sun/java2d/x11/X11PMBlitBgLoops
+sun/java2d/x11/X11SurfaceData$LazyPipe
+sun/awt/X11GraphicsConfig$X11GCDisposerRecord
+sun/java2d/DisposerRecord
+sun/java2d/Disposer
+sun/java2d/Disposer$1
+sun/misc/ThreadGroupUtils
+sun/awt/X11/XModifierKeymap
+sun/awt/X11/XWrapperBase
+sun/awt/X11/Native
+sun/awt/X11/Native$1
+sun/awt/X11/XToolkit$3
+sun/awt/X11/XToolkit$4
+sun/awt/X11/XEventDispatcher
+java/awt/Toolkit$DesktopPropertyChangeSupport
+java/beans/PropertyChangeSupport
+java/beans/PropertyChangeSupport$PropertyChangeListenerMap
+java/beans/ChangeListenerMap
+java/beans/PropertyChangeListener
+sun/awt/SunToolkit$ModalityListenerList
+sun/awt/ModalityListener
+sun/font/FontConfigManager
+sun/font/FontConfigManager$FontConfigInfo
+sun/awt/X11/AwtScreenData
+sun/awt/X11/XToolkit$1
+java/lang/invoke/DirectMethodHandle$Special
+sun/awt/X11/XToolkit$2
+java/lang/ApplicationShutdownHooks
+java/lang/ApplicationShutdownHooks$1
+java/lang/Shutdown
+java/lang/Shutdown$Lock
+sun/awt/X11/XWM
+sun/awt/X11/XAtom
+java/awt/Insets
+sun/awt/X11/XWM$1
+sun/awt/X11/XErrorHandler$XBaseErrorHandler
+sun/awt/X11/XErrorHandler
+sun/awt/X11/XSetWindowAttributes
+sun/awt/X11/XNETProtocol
+sun/awt/X11/XStateProtocol
+sun/awt/X11/XLayerProtocol
+sun/awt/X11/XProtocol
+sun/awt/X11/WindowPropertyGetter
+sun/awt/X11/UnsafeXDisposerRecord
+sun/awt/X11/XPropertyCache
+sun/awt/X11/XWINProtocol
+sun/awt/X11/XAtomList
+java/awt/Rectangle
+java/awt/geom/Rectangle2D
+sun/awt/X11/XEvent
+java/awt/geom/RectangularShape
+javax/swing/RepaintManager$ProcessingRunnable
+com/sun/java/swing/SwingUtilities3
+javax/swing/UIManager
+javax/swing/UIManager$LookAndFeelInfo
+sun/awt/OSInfo
+sun/awt/OSInfo$WindowsVersion
+sun/awt/OSInfo$1
+sun/awt/OSInfo$OSType
+sun/swing/SwingUtilities2
+java/awt/font/FontRenderContext
+java/awt/RenderingHints
+sun/swing/StringUIClientPropertyKey
+sun/swing/UIClientPropertyKey
+sun/swing/SwingUtilities2$LSBCacheEntry
+javax/swing/UIManager$LAFState
+javax/swing/UIDefaults
+javax/swing/MultiUIDefaults
+javax/swing/UIManager$1
+javax/swing/plaf/metal/MetalLookAndFeel
+javax/swing/plaf/basic/BasicLookAndFeel
+javax/swing/LookAndFeel
+sun/swing/DefaultLookup
+javax/swing/plaf/metal/OceanTheme
+javax/swing/plaf/metal/DefaultMetalTheme
+javax/swing/plaf/metal/MetalTheme
+javax/swing/plaf/ColorUIResource
+javax/swing/plaf/UIResource
+sun/swing/PrintColorUIResource
+javax/swing/plaf/metal/DefaultMetalTheme$FontDelegate
+javax/swing/plaf/FontUIResource
+sun/swing/SwingLazyValue
+javax/swing/UIDefaults$LazyValue
+javax/swing/UIDefaults$ActiveValue
+javax/swing/plaf/InsetsUIResource
+javax/swing/plaf/BorderUIResource$EmptyBorderUIResource
+javax/swing/border/EmptyBorder
+javax/swing/border/AbstractBorder
+javax/swing/border/Border
+sun/swing/SwingUtilities2$2
+javax/swing/plaf/basic/BasicLookAndFeel$2
+javax/swing/plaf/DimensionUIResource
+javax/swing/UIDefaults$LazyInputMap
+javax/swing/plaf/metal/MetalLookAndFeel$FontActiveValue
+sun/swing/SwingUtilities2$AATextInfo
+sun/awt/HeadlessToolkit
+sun/awt/X11/XAWTXSettings
+sun/awt/X11/XMSelectionListener
+sun/awt/XSettings
+sun/awt/X11/XMSelection
+sun/awt/X11/XMSelection$1
+sun/awt/X11/XMSelection$3
+sun/awt/X11/XErrorHandler$IgnoreBadWindowHandler
+sun/awt/XSettings$Update
+java/beans/PropertyChangeEvent
+java/awt/Toolkit$DesktopPropertyChangeSupport$1
+java/util/IdentityHashMap$Values
+java/util/IdentityHashMap$ValueIterator
+java/util/IdentityHashMap$IdentityHashMapIterator
+java/util/HashMap$KeySet
+java/util/HashMap$KeyIterator
+javax/swing/plaf/metal/MetalLookAndFeel$AATextListener
+java/beans/PropertyChangeListenerProxy
+java/util/EventListenerProxy
+javax/swing/plaf/metal/OceanTheme$1
+javax/swing/plaf/metal/OceanTheme$2
+javax/swing/plaf/metal/OceanTheme$3
+javax/swing/plaf/metal/OceanTheme$4
+javax/swing/plaf/metal/OceanTheme$5
+javax/swing/plaf/metal/OceanTheme$6
+javax/swing/SwingPaintEventDispatcher
+sun/awt/PaintEventDispatcher
+java/awt/KeyboardFocusManager
+java/awt/KeyEventDispatcher
+java/awt/KeyEventPostProcessor
+java/awt/KeyboardFocusManager$1
+sun/awt/AWTAccessor$KeyboardFocusManagerAccessor
+java/awt/AWTKeyStroke
+java/awt/AWTKeyStroke$1
+java/awt/DefaultKeyboardFocusManager
+java/awt/DefaultKeyboardFocusManager$1
+sun/awt/AWTAccessor$DefaultKeyboardFocusManagerAccessor
+java/awt/DefaultFocusTraversalPolicy
+java/awt/ContainerOrderFocusTraversalPolicy
+java/awt/FocusTraversalPolicy
+java/util/Collections$UnmodifiableSet
+sun/awt/X11/XKeyboardFocusManagerPeer
+sun/awt/KeyboardFocusManagerPeerImpl
+java/awt/peer/KeyboardFocusManagerPeer
+javax/swing/UIManager$2
+javax/swing/JRootPane
+javax/swing/UIDefaults$TextAndMnemonicHashMap
+com/sun/swing/internal/plaf/metal/resources/metal
+sun/util/ResourceBundleEnumeration
+com/sun/swing/internal/plaf/basic/resources/basic
+javax/swing/plaf/metal/MetalLabelUI
+javax/swing/plaf/basic/BasicLabelUI
+javax/swing/plaf/LabelUI
+javax/swing/plaf/ComponentUI
+sun/reflect/misc/MethodUtil
+sun/reflect/misc/MethodUtil$1
+sun/net/www/protocol/jar/JarURLConnection
+java/net/JarURLConnection
+sun/net/www/protocol/jar/JarFileFactory
+sun/net/www/protocol/jar/URLJarFile$URLJarFileCloseController
+java/net/HttpURLConnection
+sun/net/www/protocol/jar/URLJarFile
+sun/net/www/protocol/jar/URLJarFile$URLJarFileEntry
+sun/net/www/protocol/jar/JarURLConnection$JarURLInputStream
+java/lang/UnsupportedOperationException
+java/lang/reflect/InvocationTargetException
+javax/swing/plaf/metal/DefaultMetalTheme$FontDelegate$1
+javax/swing/plaf/basic/BasicHTML
+sun/awt/util/IdentityArrayList
+java/awt/Window$1
+sun/awt/AWTAccessor$WindowAccessor
+java/awt/Frame$1
+sun/awt/AWTAccessor$FrameAccessor
+java/awt/Window$Type
+java/awt/Cursor
+java/awt/Cursor$1
+sun/awt/AWTAccessor$CursorAccessor
+java/awt/BorderLayout
+java/awt/LayoutManager2
+sun/awt/X11/XlibUtil
+java/util/concurrent/locks/LockSupport
+sun/nio/ch/Interruptible
+java/awt/Dialog$ModalExclusionType
+java/awt/Window$WindowDisposerRecord
+javax/swing/JPanel
+java/awt/FlowLayout
+javax/swing/plaf/basic/BasicPanelUI
+javax/swing/plaf/PanelUI
+java/awt/Component$BaselineResizeBehavior
+sun/swing/SwingLazyValue$1
+javax/swing/JLayeredPane
+javax/swing/JRootPane$1
+javax/swing/ArrayTable
+javax/swing/JRootPane$RootLayout
+javax/swing/BufferStrategyPaintManager
+javax/swing/RepaintManager$PaintManager
+javax/swing/FocusManager
+javax/swing/LayoutFocusTraversalPolicy
+javax/swing/SortingFocusTraversalPolicy
+javax/swing/InternalFrameFocusTraversalPolicy
+javax/swing/SwingContainerOrderFocusTraversalPolicy
+javax/swing/SortingFocusTraversalPolicy$1
+java/util/Spliterator$OfLong
+java/util/Spliterator$OfPrimitive
+java/util/Spliterator
+java/util/Spliterator$OfInt
+java/util/Spliterator$OfDouble
+java/util/stream/IntStream
+java/util/stream/BaseStream
+java/util/stream/Stream
+java/util/stream/DoubleStream
+java/util/stream/LongStream
+java/util/function/DoubleBinaryOperator
+java/util/function/IntBinaryOperator
+java/util/function/LongBinaryOperator
+java/util/function/BinaryOperator
+java/util/function/BiFunction
+java/util/function/IntToDoubleFunction
+java/util/function/IntFunction
+java/util/function/IntToLongFunction
+java/util/function/IntUnaryOperator
+javax/swing/SwingDefaultFocusTraversalPolicy
+javax/swing/LayoutComparator
+javax/swing/plaf/metal/MetalRootPaneUI
+javax/swing/plaf/basic/BasicRootPaneUI
+javax/swing/plaf/RootPaneUI
+javax/swing/plaf/basic/BasicRootPaneUI$RootPaneInputMap
+javax/swing/plaf/ComponentInputMapUIResource
+javax/swing/ComponentInputMap
+javax/swing/InputMap
+javax/swing/plaf/InputMapUIResource
+javax/swing/KeyStroke
+java/awt/VKCollection
+sun/reflect/UnsafeQualifiedStaticIntegerFieldAccessorImpl
+javax/swing/plaf/basic/LazyActionMap
+javax/swing/plaf/ActionMapUIResource
+javax/swing/ActionMap
+sun/awt/X11/XFramePeer
+java/awt/peer/FramePeer
+java/awt/peer/WindowPeer
+java/awt/peer/ContainerPeer
+java/awt/peer/ComponentPeer
+sun/awt/X11/XDecoratedPeer
+sun/awt/X11/XWindowPeer
+sun/awt/X11/XPanelPeer
+java/awt/peer/PanelPeer
+sun/awt/X11/XCanvasPeer
+java/awt/peer/CanvasPeer
+sun/awt/X11/XComponentPeer
+java/awt/dnd/peer/DropTargetPeer
+sun/java2d/BackBufferCapsProvider
+sun/awt/X11/XWindow
+sun/awt/X11ComponentPeer
+sun/awt/X11/XBaseWindow
+sun/awt/X11/XCreateWindowParams
+sun/awt/X11/XBaseWindow$InitialiseState
+sun/awt/X11/XBaseWindow$StateLock
+sun/awt/X11/AwtGraphicsConfigData
+sun/awt/X11/XVisualInfo
+java/awt/SystemColor
+sun/awt/AWTAccessor$SystemColorAccessor
+sun/awt/X11/MotifColorUtilities
+sun/awt/X11/XRepaintArea
+sun/awt/RepaintArea
+sun/awt/X11/XWindowAttributesData
+sun/awt/X11/WindowDimensions
+java/awt/Point
+java/awt/geom/Point2D
+java/util/TreeMap$Entry
+sun/awt/X11/XSizeHints
+sun/awt/X11/XRootWindow
+sun/awt/X11/XRootWindow$LazyHolder
+sun/nio/cs/ISO_8859_1$Encoder
+sun/nio/cs/Surrogate$Parser
+sun/nio/cs/Surrogate
+sun/java2d/x11/X11SurfaceData$X11WindowSurfaceData
+sun/awt/X11/XDropTargetEventProcessor
+sun/java2d/loops/RenderLoops
+sun/awt/X11/XDragSourceContextPeer
+sun/java2d/loops/GraphicsPrimitiveMgr$PrimitiveSpec
+sun/awt/X11/XDragSourceProtocolListener
+java/util/Arrays$LegacyMergeSort
+sun/awt/dnd/SunDragSourceContextPeer
+java/awt/dnd/peer/DragSourceContextPeer
+java/util/TimSort
+sun/awt/X11/XAnyEvent
+sun/awt/X11/XAwtState
+sun/awt/X11/XBaseWindow$1
+sun/awt/X11/XPropertyEvent
+sun/java2d/DefaultDisposerRecord
+sun/java2d/SurfaceDataProxy
+sun/awt/image/SurfaceManager$FlushableCacheData
+sun/java2d/SurfaceDataProxy$1
+sun/java2d/StateTracker
+sun/java2d/StateTracker$1
+sun/java2d/StateTracker$2
+sun/java2d/x11/X11Renderer
+sun/awt/X11/XGlobalCursorManager
+sun/awt/GlobalCursorManager
+sun/awt/IconInfo
+sun/awt/AWTIcon32_java_icon16_png
+sun/awt/AWTIcon32_java_icon24_png
+sun/awt/AWTIcon32_java_icon32_png
+sun/awt/AWTIcon32_java_icon48_png
+sun/awt/X11/XClientMessageEvent
+sun/awt/X11/XContentWindow
+sun/awt/X11/XFocusProxyWindow
+sun/awt/X11/XWMHints
+java/util/LinkedList$ListItr
+sun/awt/AWTAutoShutdown
+java/awt/peer/LightweightPeer
+sun/awt/NullComponentPeer
+java/awt/SplashScreen
+java/awt/Dialog
+java/awt/Dialog$ModalityType
+sun/awt/X11/PropMwmHints
+sun/awt/X11/XWindowPeer$4
+sun/awt/GlobalCursorManager$NativeUpdater
+java/awt/event/WindowEvent
+java/awt/EventQueue$5
+java/awt/EventDispatchThread
+sun/awt/PeerEvent
+java/awt/EventDispatchThread$1
+java/awt/Conditional
+java/awt/event/InvocationEvent
+java/awt/ActiveEvent
+java/awt/EventDispatchThread$HierarchyEventFilter
+java/awt/EventFilter
+java/awt/event/PaintEvent
+sun/awt/X11/XReparentEvent
+java/awt/event/MouseEvent
+java/awt/ModalEventFilter
+sun/awt/EventQueueItem
+sun/awt/EventQueueDelegate
+java/awt/EventFilter$FilterAction
+java/awt/EventQueue$3
+java/awt/EventQueue$4
+sun/awt/dnd/SunDropTargetEvent
+sun/awt/X11/XConfigureEvent
+java/awt/event/InputMethodEvent
+java/awt/event/ActionEvent
+java/awt/event/FocusEvent
+java/util/Vector$Itr
+java/awt/event/InvocationEvent$1
+sun/awt/X11/XWindowPeer$2
+sun/awt/AWTAccessor$InvocationEventAccessor
+java/applet/Applet
+java/awt/Panel
+sun/awt/X11/XVisibilityEvent
+sun/awt/X11/XExposeEvent
+sun/awt/event/IgnorePaintEvent
+sun/awt/X11/XTranslateCoordinates
+sun/awt/X11/XFocusChangeEvent
+java/awt/SequencedEvent
+java/awt/SequencedEvent$1
+sun/awt/AWTAccessor$SequencedEventAccessor
+sun/awt/X11/XComponentPeer$1
+java/awt/MenuComponent
+java/awt/TrayIcon
+java/util/IdentityHashMap$KeySet
+java/util/IdentityHashMap$KeyIterator
+javax/swing/RepaintManager$4
+java/awt/GraphicsCallback$PaintCallback
+java/awt/GraphicsCallback
+sun/awt/SunGraphicsCallback
+javax/swing/BufferStrategyPaintManager$BufferInfo
+java/awt/event/WindowListener
+java/awt/event/ComponentAdapter
+java/awt/event/ComponentListener
+java/awt/AWTEventMulticaster
+java/awt/event/ContainerListener
+java/awt/event/FocusListener
+java/awt/event/KeyListener
+java/awt/event/MouseListener
+java/awt/event/MouseMotionListener
+java/awt/event/WindowFocusListener
+java/awt/event/WindowStateListener
+java/awt/event/ActionListener
+java/awt/event/ItemListener
+java/awt/event/AdjustmentListener
+java/awt/event/TextListener
+java/awt/event/InputMethodListener
+java/awt/event/HierarchyListener
+java/awt/event/HierarchyBoundsListener
+java/awt/event/MouseWheelListener
+java/awt/BufferCapabilities
+java/awt/Component$BltSubRegionBufferStrategy
+sun/awt/SubRegionShowable
+java/awt/Component$BltBufferStrategy
+java/awt/image/BufferStrategy
+java/awt/image/VolatileImage
+java/awt/Image
+sun/awt/image/SunVolatileImage
+java/awt/Image$1
+sun/awt/image/SurfaceManager$ImageAccessor
+sun/awt/image/SurfaceManager
+sun/awt/image/BufferedImageGraphicsConfig
+sun/print/PrinterGraphicsConfig
+sun/java2d/opengl/GLXGraphicsConfig
+sun/java2d/opengl/OGLGraphicsConfig
+sun/java2d/pipe/hw/AccelGraphicsConfig
+sun/java2d/pipe/hw/BufferedContextProvider
+sun/java2d/xr/XRGraphicsConfig
+sun/java2d/x11/X11VolatileSurfaceManager
+sun/awt/image/VolatileSurfaceManager
+sun/java2d/x11/X11SurfaceData$X11PixmapSurfaceData
+sun/font/FontDesignMetrics
+java/awt/FontMetrics
+sun/font/SunFontManager
+sun/java2d/FontSupport
+sun/font/FontManagerForSGE
+sun/font/FontManager
+sun/font/SunFontManager$TTFilter
+java/io/FilenameFilter
+sun/font/SunFontManager$T1Filter
+sun/font/SunFontManager$1
+sun/font/FontManagerNativeLibrary
+sun/font/FontManagerNativeLibrary$1
+sun/font/FontUtilities
+sun/font/FontUtilities$1
+sun/font/TrueTypeFont
+sun/font/FileFont
+sun/font/PhysicalFont
+sun/font/Font2D
+sun/font/Type1Font
+java/awt/geom/Point2D$Float
+sun/font/StrikeMetrics
+java/awt/geom/Rectangle2D$Float
+java/awt/geom/GeneralPath
+sun/font/CharToGlyphMapper
+sun/font/PhysicalStrike
+sun/font/FontStrike
+sun/font/StrikeCache
+sun/font/StrikeCache$1
+sun/font/GlyphList
+sun/font/FontManagerFactory
+sun/font/FontManagerFactory$1
+sun/awt/X11FontManager
+sun/font/CompositeFont
+sun/font/SunFontManager$2
+java/io/StreamTokenizer
+sun/font/SunFontManager$FontRegistrationInfo
+sun/awt/motif/MFontConfiguration
+sun/awt/FontConfiguration
+sun/awt/FontDescriptor
+java/util/Properties$LineReader
+sun/font/FcFontConfiguration
+java/net/InetAddress
+java/net/InetAddress$1
+java/net/InetAddress$InetAddressHolder
+java/net/InetAddress$Cache
+java/net/InetAddress$Cache$Type
+java/net/InetAddressImplFactory
+java/net/Inet4AddressImpl
+java/net/InetAddressImpl
+java/net/InetAddress$2
+sun/net/spi/nameservice/NameService
+java/net/Inet4Address
+java/net/Inet6Address
+java/net/Inet6Address$Inet6AddressHolder
+sun/net/InetAddressCachePolicy
+sun/net/InetAddressCachePolicy$1
+java/security/Security
+java/security/Security$1
+sun/net/InetAddressCachePolicy$2
+java/util/LinkedHashMap$LinkedKeySet
+java/util/LinkedHashMap$LinkedKeyIterator
+java/net/InetAddress$CacheEntry
+sun/font/FontConfigManager$FcCompFont
+sun/font/FontConfigManager$FontConfigFont
+sun/font/CompositeFontDescriptor
+sun/font/Font2DHandle
+sun/font/FontFamily
+sun/font/SunFontManager$3
+sun/font/FontDesignMetrics$MetricsKey
+sun/font/FontStrikeDesc
+sun/font/CompositeStrike
+sun/font/FontStrikeDisposer
+sun/java2d/Disposer$PollDisposable
+sun/font/StrikeCache$SoftDisposerRef
+sun/font/StrikeCache$DisposableStrike
+sun/font/TrueTypeFont$TTDisposerRecord
+sun/font/TrueTypeFont$1
+java/io/RandomAccessFile
+java/io/DataOutput
+java/io/DataInput
+sun/nio/ch/FileChannelImpl
+java/nio/channels/FileChannel
+java/nio/channels/SeekableByteChannel
+java/nio/channels/ByteChannel
+java/nio/channels/ReadableByteChannel
+java/nio/channels/Channel
+java/nio/channels/WritableByteChannel
+java/nio/channels/GatheringByteChannel
+java/nio/channels/ScatteringByteChannel
+java/nio/channels/spi/AbstractInterruptibleChannel
+java/nio/channels/InterruptibleChannel
+java/nio/file/attribute/FileAttribute
+sun/nio/ch/IOUtil
+sun/nio/ch/IOUtil$1
+sun/nio/ch/NativeThreadSet
+sun/nio/ch/FileDispatcherImpl
+sun/nio/ch/FileDispatcher
+sun/nio/ch/NativeDispatcher
+java/nio/channels/spi/AbstractInterruptibleChannel$1
+sun/nio/ch/NativeThread
+sun/nio/ch/IOStatus
+sun/nio/ch/Util
+sun/nio/ch/Util$1
+sun/nio/ch/Util$BufferCache
+java/nio/DirectByteBuffer$Deallocator
+java/nio/ByteBufferAsIntBufferB
+java/nio/IntBuffer
+sun/font/TrueTypeFont$DirectoryEntry
+java/nio/ByteBufferAsShortBufferB
+java/nio/ShortBuffer
+sun/nio/cs/UTF_16$Decoder
+sun/nio/cs/UnicodeDecoder
+sun/font/FileFontStrike
+sun/font/FontScaler
+sun/font/T2KFontScaler
+sun/font/T2KFontScaler$1
+sun/font/TrueTypeGlyphMapper
+sun/font/CMap
+sun/font/CMap$NullCMapClass
+sun/font/CMap$CMapFormat12
+sun/font/FontDesignMetrics$KeyReference
+sun/font/CompositeGlyphMapper
+java/awt/print/PrinterGraphics
+java/awt/PrintGraphics
+sun/java2d/loops/FontInfo
+sun/awt/X11/XSystemTrayPeer
+java/awt/peer/SystemTrayPeer
+java/util/jar/Attributes
+java/util/jar/Manifest$FastInputStream
+java/util/jar/Attributes$Name
+sun/misc/ASCIICaseInsensitiveComparator
+java/util/jar/JarVerifier
+java/security/CodeSigner
+java/util/jar/JarVerifier$3
+java/io/ByteArrayOutputStream
+java/lang/Package
+sun/security/util/SignatureFileVerifier
+sun/security/util/ManifestEntryVerifier
+java/util/MissingResourceException
+javax/swing/JDialog
+javax/swing/text/JTextComponent
+javax/swing/Scrollable
+javax/swing/JTextArea
+javax/swing/JScrollPane
+javax/swing/ScrollPaneConstants
+javax/swing/AbstractButton
+java/awt/ItemSelectable
+javax/swing/JButton
+java/io/StringWriter
+java/lang/SecurityException
+javax/swing/JWindow
+java/io/UnsupportedEncodingException
+sun/misc/URLClassPath$FileLoader
+java/lang/CloneNotSupportedException
+java/lang/InternalError
+java/net/UnknownHostException
+java/net/Socket
+java/net/SocketAddress
+java/nio/channels/SocketChannel
+java/nio/channels/NetworkChannel
+java/nio/channels/spi/AbstractSelectableChannel
+java/nio/channels/SelectableChannel
+java/net/SocketException
+java/net/SocketImplFactory
+java/net/InetSocketAddress
+java/net/InetSocketAddress$InetSocketAddressHolder
+java/net/Proxy
+java/net/SocketImpl
+java/net/SocketOptions
+java/net/SocksSocketImpl
+java/net/SocksConsts
+java/net/PlainSocketImpl
+java/net/AbstractPlainSocketImpl
+java/net/AbstractPlainSocketImpl$1
+sun/net/util/IPAddressUtil
+java/net/SocksSocketImpl$3
+java/net/ProxySelector
+sun/net/spi/DefaultProxySelector
+sun/net/spi/DefaultProxySelector$1
+sun/net/NetProperties
+sun/net/NetProperties$1
+java/net/URI
+java/net/URI$Parser
+sun/net/spi/DefaultProxySelector$NonProxyInfo
+sun/net/spi/DefaultProxySelector$3
+java/net/Proxy$Type
+sun/net/NetHooks
+sun/net/sdp/SdpProvider
+sun/net/NetHooks$Provider
+java/net/ConnectException
+java/net/MalformedURLException
+java/lang/UnsatisfiedLinkError
+javax/swing/UnsupportedLookAndFeelException
+sun/misc/FloatingDecimal$ASCIIToBinaryBuffer
+sun/misc/FDBigInteger
+java/util/ResourceBundle$Control$1
+java/net/URLClassLoader$2
+java/util/PropertyResourceBundle
+java/util/ResourceBundle$BundleReference
+java/util/logging/Level
+java/util/logging/Level$KnownLevel
+java/util/logging/Logger
+java/util/logging/Handler
+java/util/logging/Logger$LoggerBundle
+java/util/concurrent/CopyOnWriteArrayList
+java/util/logging/LogManager
+java/util/logging/LogManager$1
+java/util/logging/LogManager$SystemLoggerContext
+java/util/logging/LogManager$LoggerContext
+java/util/logging/LogManager$LogNode
+java/util/logging/LoggingPermission
+java/util/logging/LogManager$Cleaner
+java/util/logging/LogManager$2
+java/util/logging/LogManager$3
+java/util/logging/LogManager$LoggerWeakRef
+java/util/logging/LogManager$LoggerContext$1
+java/util/logging/LogManager$RootLogger
+java/util/logging/LogManager$5
+java/util/logging/Logger$1
+sun/util/logging/resources/logging
+javax/swing/Box
+javax/swing/Box$Filler
+javax/swing/Icon
+javax/swing/BoxLayout
+javax/swing/plaf/basic/BasicPopupMenuUI
+javax/swing/plaf/PopupMenuUI
+javax/swing/ImageIcon
+javax/swing/ImageIcon$1
+javax/swing/ImageIcon$2
+javax/swing/ImageIcon$2$1
+java/awt/dnd/DropTarget
+java/awt/dnd/DropTargetListener
+javax/accessibility/AccessibleContext
+sun/reflect/UnsafeObjectFieldAccessorImpl
+java/awt/MediaTracker
+sun/misc/SoftCache$ValueCell
+sun/awt/image/URLImageSource
+sun/awt/image/InputStreamImageSource
+java/awt/image/ImageProducer
+sun/awt/image/ImageFetchable
+sun/awt/image/ToolkitImage
+sun/awt/image/NativeLibLoader
+sun/awt/image/NativeLibLoader$1
+javax/swing/ImageIcon$3
+java/awt/ImageMediaEntry
+java/awt/MediaEntry
+sun/awt/image/MultiResolutionToolkitImage
+sun/awt/image/MultiResolutionImage
+sun/awt/image/ImageRepresentation
+java/awt/image/ImageConsumer
+sun/awt/image/ImageWatched
+sun/awt/image/ImageWatched$Link
+sun/awt/image/ImageWatched$WeakLink
+sun/awt/image/ImageConsumerQueue
+sun/awt/image/ImageFetcher
+sun/awt/image/FetcherInfo
+sun/awt/image/ImageFetcher$1
+sun/net/ProgressMonitor
+sun/net/DefaultProgressMeteringPolicy
+sun/net/ProgressMeteringPolicy
+sun/net/www/MimeTable
+java/net/FileNameMap
+sun/net/www/MimeTable$1
+sun/net/www/MimeTable$DefaultInstanceHolder
+sun/net/www/MimeTable$DefaultInstanceHolder$1
+sun/net/www/MimeEntry
+java/net/URLConnection$1
+java/text/SimpleDateFormat
+java/text/DateFormat
+java/text/Format
+java/text/DateFormat$Field
+java/text/Format$Field
+java/util/TimeZone
+sun/util/calendar/ZoneInfo
+sun/util/calendar/ZoneInfoFile
+sun/util/calendar/ZoneInfoFile$1
+java/io/DataInputStream
+sun/util/calendar/ZoneInfoFile$ZoneOffsetTransitionRule
+sun/util/calendar/ZoneInfoFile$Checksum
+java/util/zip/CRC32
+java/util/zip/Checksum
+java/util/TimeZone$1
+java/util/Calendar
+sun/util/spi/CalendarProvider
+java/util/spi/LocaleServiceProvider
+sun/util/locale/provider/LocaleProviderAdapter
+sun/util/locale/provider/JRELocaleProviderAdapter
+sun/util/locale/provider/ResourceBundleBasedAdapter
+sun/util/locale/provider/SPILocaleProviderAdapter
+sun/util/locale/provider/AuxLocaleProviderAdapter
+sun/util/locale/provider/AuxLocaleProviderAdapter$NullProvider
+sun/util/locale/provider/LocaleProviderAdapter$Type
+sun/util/locale/provider/LocaleProviderAdapter$1
+sun/util/locale/provider/CalendarProviderImpl
+sun/util/locale/provider/AvailableLanguageTags
+sun/util/locale/provider/LocaleDataMetaInfo
+sun/util/locale/provider/JRELocaleProviderAdapter$1
+java/util/Calendar$Builder
+java/util/GregorianCalendar
+sun/util/locale/provider/CalendarDataUtility
+java/util/spi/CalendarDataProvider
+sun/util/locale/provider/LocaleServiceProviderPool
+java/text/spi/BreakIteratorProvider
+java/text/spi/CollatorProvider
+java/text/spi/DateFormatProvider
+java/text/spi/DateFormatSymbolsProvider
+java/text/spi/DecimalFormatSymbolsProvider
+java/text/spi/NumberFormatProvider
+java/util/spi/CurrencyNameProvider
+java/util/spi/LocaleNameProvider
+java/util/spi/TimeZoneNameProvider
+sun/util/locale/provider/CalendarDataProviderImpl
+sun/util/locale/provider/SPILocaleProviderAdapter$1
+sun/util/locale/provider/CalendarDataUtility$CalendarWeekParameterGetter
+sun/util/locale/provider/LocaleServiceProviderPool$LocalizedObjectGetter
+sun/util/locale/provider/LocaleResources
+sun/util/resources/LocaleData
+sun/util/resources/LocaleData$1
+sun/util/resources/LocaleData$LocaleDataResourceBundleControl
+sun/util/locale/LanguageTag
+java/util/Collections$EmptyIterator
+sun/util/resources/CalendarData
+sun/util/resources/LocaleNamesBundle
+sun/util/resources/OpenListResourceBundle
+sun/util/resources/en/CalendarData_en
+sun/util/locale/provider/LocaleResources$ResourceReference
+sun/util/calendar/Gregorian$Date
+sun/util/calendar/BaseCalendar$Date
+sun/util/calendar/CalendarDate
+sun/util/calendar/CalendarUtils
+java/text/DateFormatSymbols
+sun/util/locale/provider/DateFormatSymbolsProviderImpl
+sun/text/resources/FormatData
+sun/util/resources/ParallelListResourceBundle
+java/util/concurrent/atomic/AtomicMarkableReference
+java/util/concurrent/atomic/AtomicMarkableReference$Pair
+sun/text/resources/en/FormatData_en
+sun/text/resources/en/FormatData_en_US
+sun/util/resources/ParallelListResourceBundle$KeySet
+java/text/NumberFormat
+sun/util/locale/provider/NumberFormatProviderImpl
+java/text/DecimalFormatSymbols
+sun/util/locale/provider/DecimalFormatSymbolsProviderImpl
+java/util/Currency
+java/util/Currency$1
+sun/util/locale/provider/CurrencyNameProviderImpl
+java/util/Currency$CurrencyNameGetter
+sun/util/resources/CurrencyNames
+sun/util/resources/en/CurrencyNames_en_US
+java/text/DecimalFormat
+java/text/FieldPosition
+java/text/DigitList
+java/math/RoundingMode
+java/text/DontCareFieldPosition
+java/text/DontCareFieldPosition$1
+java/text/Format$FieldDelegate
+sun/awt/image/GifImageDecoder
+sun/awt/image/ImageDecoder
+sun/awt/image/GifFrame
+java/awt/image/Raster
+java/awt/image/DataBufferByte
+java/awt/image/DataBuffer
+java/awt/image/DataBuffer$1
+sun/awt/image/SunWritableRaster$DataStealer
+sun/awt/image/SunWritableRaster
+java/awt/image/WritableRaster
+java/awt/image/PixelInterleavedSampleModel
+java/awt/image/ComponentSampleModel
+java/awt/image/SampleModel
+sun/awt/image/ByteInterleavedRaster
+sun/awt/image/ByteComponentRaster
+java/awt/image/BufferedImage
+java/awt/image/WritableRenderedImage
+java/awt/image/RenderedImage
+java/awt/image/BufferedImage$1
+sun/awt/image/IntegerComponentRaster
+sun/awt/image/BytePackedRaster
+javax/swing/plaf/BorderUIResource
+javax/swing/BorderFactory
+javax/swing/border/BevelBorder
+javax/swing/border/EtchedBorder
+javax/swing/plaf/metal/MetalIconFactory
+javax/swing/plaf/metal/MetalIconFactory$TreeFolderIcon
+javax/swing/plaf/metal/MetalIconFactory$FolderIcon16
+java/util/zip/ZipInputStream
+java/io/PushbackInputStream
+java/util/zip/ZipUtils
+java/io/RandomAccessFile$1
+java/lang/Thread$State
+javax/swing/SwingUtilities$SharedOwnerFrame
+sun/awt/X11/XWindowAttributes
+javax/swing/border/LineBorder
+javax/swing/SizeRequirements
+java/util/ArrayList$ListItr
+javax/swing/CellRendererPane
+javax/swing/RepaintManager$3
+javax/swing/JRadioButton
+javax/swing/JToggleButton
+java/lang/ClassFormatError
+java/io/ObjectInputStream
+java/io/ObjectInput
+java/io/ObjectStreamConstants
+sun/awt/image/BufImgSurfaceManager
+sun/awt/image/BufImgSurfaceData
+sun/awt/image/BufImgSurfaceData$ICMColorData
+sun/java2d/x11/X11SurfaceDataProxy
+sun/java2d/x11/X11SurfaceDataProxy$Bitmask
+sun/java2d/StateTrackableDelegate$1
+javax/swing/JTabbedPane
+java/awt/geom/RectIterator
+java/awt/geom/PathIterator
+javax/swing/event/ChangeListener
+java/awt/Polygon
+javax/swing/event/MenuListener
+javax/swing/DefaultSingleSelectionModel
+javax/swing/SingleSelectionModel
+javax/swing/JTabbedPane$ModelListener
+javax/swing/plaf/metal/MetalTabbedPaneUI
+javax/swing/plaf/basic/BasicTabbedPaneUI
+javax/swing/plaf/TabbedPaneUI
+javax/swing/plaf/metal/MetalTabbedPaneUI$TabbedPaneLayout
+javax/swing/plaf/basic/BasicTabbedPaneUI$TabbedPaneLayout
+javax/swing/plaf/basic/BasicTabbedPaneUI$TabbedPaneScrollLayout
+javax/swing/plaf/basic/BasicTabbedPaneUI$Handler
+sun/reflect/MethodAccessorGenerator
+sun/reflect/AccessorGenerator
+sun/reflect/ClassFileConstants
+sun/reflect/ByteVectorFactory
+sun/reflect/ByteVectorImpl
+sun/reflect/ByteVector
+sun/reflect/ClassFileAssembler
+sun/reflect/UTF8
+sun/reflect/Label
+sun/reflect/Label$PatchInfo
+sun/reflect/MethodAccessorGenerator$1
+sun/reflect/ClassDefiner
+sun/reflect/ClassDefiner$1
+sun/reflect/BootstrapConstructorAccessorImpl
+javax/swing/JTextField
+javax/swing/JViewport
+java/awt/CardLayout
+javax/swing/text/Document
+javax/swing/text/JTextComponent$1
+sun/swing/SwingAccessor$JTextComponentAccessor
+javax/swing/text/JTextComponent$4
+com/sun/beans/util/Cache
+com/sun/beans/util/Cache$Kind
+com/sun/beans/util/Cache$Kind$1
+com/sun/beans/util/Cache$Kind$2
+com/sun/beans/util/Cache$Kind$3
+com/sun/beans/util/Cache$CacheEntry
+javax/swing/Action
+javax/swing/JTextField$NotifyAction
+javax/swing/text/TextAction
+javax/swing/AbstractAction
+java/lang/ArrayIndexOutOfBoundsException
+javax/swing/DropMode
+javax/swing/text/JTextComponent$MutableCaretEvent
+javax/swing/event/CaretEvent
+javax/swing/plaf/metal/MetalTextFieldUI
+javax/swing/plaf/basic/BasicTextFieldUI
+javax/swing/plaf/basic/BasicTextUI
+javax/swing/text/ViewFactory
+javax/swing/plaf/TextUI
+javax/swing/plaf/basic/BasicTextUI$BasicCursor
+javax/swing/text/DefaultEditorKit
+javax/swing/text/EditorKit
+javax/swing/text/DefaultEditorKit$InsertContentAction
+javax/swing/text/DefaultEditorKit$DeletePrevCharAction
+javax/swing/text/DefaultEditorKit$DeleteNextCharAction
+javax/swing/text/DefaultEditorKit$ReadOnlyAction
+javax/swing/text/DefaultEditorKit$DeleteWordAction
+javax/swing/text/DefaultEditorKit$WritableAction
+javax/swing/text/DefaultEditorKit$CutAction
+javax/swing/text/DefaultEditorKit$CopyAction
+javax/swing/text/DefaultEditorKit$PasteAction
+javax/swing/text/DefaultEditorKit$VerticalPageAction
+javax/swing/text/DefaultEditorKit$PageAction
+javax/swing/text/DefaultEditorKit$InsertBreakAction
+javax/swing/text/DefaultEditorKit$BeepAction
+javax/swing/text/DefaultEditorKit$NextVisualPositionAction
+javax/swing/text/DefaultEditorKit$BeginWordAction
+javax/swing/text/DefaultEditorKit$EndWordAction
+javax/swing/text/DefaultEditorKit$PreviousWordAction
+javax/swing/text/DefaultEditorKit$NextWordAction
+javax/swing/text/DefaultEditorKit$BeginLineAction
+javax/swing/text/DefaultEditorKit$EndLineAction
+javax/swing/text/DefaultEditorKit$BeginParagraphAction
+javax/swing/text/DefaultEditorKit$EndParagraphAction
+javax/swing/text/DefaultEditorKit$BeginAction
+javax/swing/text/DefaultEditorKit$EndAction
+javax/swing/text/DefaultEditorKit$DefaultKeyTypedAction
+javax/swing/text/DefaultEditorKit$InsertTabAction
+javax/swing/text/DefaultEditorKit$SelectWordAction
+javax/swing/text/DefaultEditorKit$SelectLineAction
+javax/swing/text/DefaultEditorKit$SelectParagraphAction
+javax/swing/text/DefaultEditorKit$SelectAllAction
+javax/swing/text/DefaultEditorKit$UnselectAction
+javax/swing/text/DefaultEditorKit$ToggleComponentOrientationAction
+javax/swing/text/DefaultEditorKit$DumpModelAction
+javax/swing/plaf/basic/BasicTextUI$TextTransferHandler
+javax/swing/TransferHandler
+javax/swing/TransferHandler$TransferAction
+sun/swing/UIAction
+javax/swing/text/Position$Bias
+javax/swing/plaf/basic/BasicTextUI$RootView
+javax/swing/text/View
+javax/swing/plaf/basic/BasicTextUI$UpdateHandler
+javax/swing/event/DocumentListener
+javax/swing/plaf/basic/BasicTextUI$DragListener
+javax/swing/plaf/basic/DragRecognitionSupport$BeforeDrag
+javax/swing/event/MouseInputAdapter
+javax/swing/event/MouseInputListener
+java/awt/event/MouseAdapter
+javax/swing/plaf/metal/MetalBorders
+javax/swing/plaf/BorderUIResource$CompoundBorderUIResource
+javax/swing/border/CompoundBorder
+javax/swing/plaf/metal/MetalBorders$TextFieldBorder
+javax/swing/plaf/metal/MetalBorders$Flush3DBorder
+javax/swing/plaf/basic/BasicBorders$MarginBorder
+javax/swing/plaf/basic/BasicTextUI$BasicCaret
+javax/swing/text/DefaultCaret
+javax/swing/text/Caret
+javax/swing/text/DefaultCaret$Handler
+java/awt/datatransfer/ClipboardOwner
+javax/swing/Timer
+javax/swing/Timer$DoPostEvent
+javax/swing/plaf/basic/BasicTextUI$BasicHighlighter
+javax/swing/text/DefaultHighlighter
+javax/swing/text/LayeredHighlighter
+javax/swing/text/Highlighter
+javax/swing/text/Highlighter$Highlight
+javax/swing/text/DefaultHighlighter$DefaultHighlightPainter
+javax/swing/text/LayeredHighlighter$LayerPainter
+javax/swing/text/Highlighter$HighlightPainter
+javax/swing/text/DefaultHighlighter$SafeDamager
+javax/swing/ClientPropertyKey
+javax/swing/ClientPropertyKey$1
+sun/awt/AWTAccessor$ClientPropertyKeyAccessor
+javax/swing/TransferHandler$SwingDropTarget
+java/awt/dnd/DropTargetContext
+java/awt/datatransfer/SystemFlavorMap
+java/awt/datatransfer/FlavorMap
+java/awt/datatransfer/FlavorTable
+java/awt/datatransfer/SystemFlavorMap$SoftCache
+javax/swing/TransferHandler$DropHandler
+javax/swing/TransferHandler$TransferSupport
+javax/swing/text/PlainDocument
+javax/swing/text/AbstractDocument
+javax/swing/text/GapContent
+javax/swing/text/AbstractDocument$Content
+javax/swing/text/GapVector
+javax/swing/text/GapContent$MarkVector
+javax/swing/text/GapContent$MarkData
+javax/swing/text/StyleContext
+javax/swing/text/AbstractDocument$AttributeContext
+javax/swing/text/StyleConstants
+javax/swing/text/StyleConstants$CharacterConstants
+javax/swing/text/AttributeSet$CharacterAttribute
+javax/swing/text/StyleConstants$FontConstants
+javax/swing/text/AttributeSet$FontAttribute
+javax/swing/text/StyleConstants$ColorConstants
+javax/swing/text/AttributeSet$ColorAttribute
+javax/swing/text/StyleConstants$ParagraphConstants
+javax/swing/text/AttributeSet$ParagraphAttribute
+javax/swing/text/StyleContext$FontKey
+javax/swing/text/SimpleAttributeSet
+javax/swing/text/MutableAttributeSet
+javax/swing/text/AttributeSet
+javax/swing/text/SimpleAttributeSet$EmptyAttributeSet
+javax/swing/text/StyleContext$NamedStyle
+javax/swing/text/Style
+java/util/Collections$EmptyEnumeration
+javax/swing/text/StyleContext$SmallAttributeSet
+java/util/Collections$3
+javax/swing/text/AbstractDocument$BidiRootElement
+javax/swing/text/AbstractDocument$BranchElement
+javax/swing/text/AbstractDocument$AbstractElement
+javax/swing/text/Element
+javax/swing/tree/TreeNode
+javax/swing/text/AbstractDocument$1
+javax/swing/text/AbstractDocument$BidiElement
+javax/swing/text/AbstractDocument$LeafElement
+javax/swing/text/GapContent$StickyPosition
+javax/swing/text/Position
+javax/swing/text/StyleContext$KeyEnumeration
+javax/swing/text/FieldView
+javax/swing/text/PlainView
+javax/swing/text/TabExpander
+javax/swing/text/JTextComponent$DefaultKeymap
+javax/swing/text/Keymap
+javax/swing/text/JTextComponent$KeymapWrapper
+javax/swing/text/JTextComponent$KeymapActionMap
+javax/swing/plaf/basic/BasicTextUI$FocusAction
+javax/swing/plaf/basic/BasicTextUI$TextActionWrapper
+javax/swing/plaf/synth/SynthUI
+javax/swing/plaf/synth/SynthConstants
+javax/swing/JEditorPane
+javax/swing/DefaultBoundedRangeModel
+javax/swing/BoundedRangeModel
+javax/swing/JTextField$ScrollRepainter
+javax/swing/DefaultButtonModel
+javax/swing/ButtonModel
+javax/swing/AbstractButton$Handler
+javax/swing/plaf/basic/BasicButtonUI
+javax/swing/plaf/ButtonUI
+javax/swing/plaf/metal/MetalBorders$ButtonBorder
+javax/swing/plaf/basic/BasicButtonListener
+javax/swing/event/AncestorListener
+java/beans/VetoableChangeListener
+javax/swing/plaf/metal/MetalComboBoxButton
+javax/swing/plaf/basic/BasicArrowButton
+javax/swing/plaf/metal/MetalScrollButton
+sun/swing/ImageIconUIResource
+javax/swing/GrayFilter
+java/awt/image/RGBImageFilter
+java/awt/image/ImageFilter
+java/awt/image/FilteredImageSource
+javax/swing/plaf/basic/BasicGraphicsUtils
+javax/swing/ButtonGroup
+org/w3c/dom/Node
+org/xml/sax/SAXException
+javax/xml/parsers/ParserConfigurationException
+org/xml/sax/EntityResolver
+java/security/NoSuchAlgorithmException
+java/security/GeneralSecurityException
+java/util/zip/GZIPInputStream
+java/util/zip/DeflaterOutputStream
+java/io/StringReader
+org/xml/sax/InputSource
+javax/xml/parsers/DocumentBuilderFactory
+javax/xml/parsers/FactoryFinder
+javax/xml/parsers/SecuritySupport
+javax/xml/parsers/SecuritySupport$2
+javax/xml/parsers/SecuritySupport$5
+javax/xml/parsers/FactoryFinder$1
+javax/xml/parsers/DocumentBuilder
+org/xml/sax/ErrorHandler
+org/w3c/dom/Document
+org/xml/sax/helpers/DefaultHandler
+org/xml/sax/DTDHandler
+org/xml/sax/ContentHandler
+org/xml/sax/SAXNotRecognizedException
+org/xml/sax/SAXNotSupportedException
+org/xml/sax/Locator
+org/xml/sax/SAXParseException
+org/w3c/dom/NodeList
+org/w3c/dom/events/EventTarget
+org/w3c/dom/traversal/DocumentTraversal
+org/w3c/dom/events/DocumentEvent
+org/w3c/dom/ranges/DocumentRange
+org/w3c/dom/Element
+org/w3c/dom/CharacterData
+org/w3c/dom/CDATASection
+org/w3c/dom/Text
+org/w3c/dom/Entity
+org/xml/sax/AttributeList
+org/w3c/dom/DOMException
+org/w3c/dom/DocumentType
+org/w3c/dom/Attr
+org/w3c/dom/EntityReference
+org/w3c/dom/DocumentFragment
+org/w3c/dom/ProcessingInstruction
+org/w3c/dom/Notation
+org/w3c/dom/Comment
+org/w3c/dom/events/EventException
+org/w3c/dom/events/Event
+org/w3c/dom/events/MutationEvent
+org/w3c/dom/traversal/TreeWalker
+org/w3c/dom/ranges/Range
+org/w3c/dom/traversal/NodeIterator
+org/w3c/dom/NamedNodeMap
+java/awt/GridLayout
+javax/swing/JToggleButton$ToggleButtonModel
+javax/swing/plaf/metal/MetalRadioButtonUI
+javax/swing/plaf/basic/BasicRadioButtonUI
+javax/swing/plaf/basic/BasicToggleButtonUI
+javax/swing/plaf/basic/BasicBorders
+javax/swing/plaf/basic/BasicBorders$RadioButtonBorder
+javax/swing/plaf/basic/BasicBorders$ButtonBorder
+javax/swing/plaf/metal/MetalIconFactory$RadioButtonIcon
+javax/swing/plaf/basic/BasicRadioButtonUI$KeyHandler
+javax/swing/plaf/basic/BasicRadioButtonUI$SelectPreviousBtn
+javax/swing/plaf/basic/BasicRadioButtonUI$SelectNextBtn
+javax/swing/event/ChangeEvent
+java/awt/event/ItemEvent
+javax/swing/ToolTipManager
+javax/swing/ToolTipManager$insideTimerAction
+javax/swing/ToolTipManager$outsideTimerAction
+javax/swing/ToolTipManager$stillInsideTimerAction
+javax/swing/ToolTipManager$MoveBeforeEnterListener
+java/awt/event/MouseMotionAdapter
+javax/swing/ToolTipManager$AccessibilityKeyListener
+java/awt/event/KeyAdapter
+java/awt/CardLayout$Card
+javax/swing/JComboBox
+javax/swing/event/ListDataListener
+javax/swing/JCheckBox
+javax/swing/JPopupMenu
+javax/swing/MenuElement
+javax/swing/DefaultComboBoxModel
+javax/swing/MutableComboBoxModel
+javax/swing/ComboBoxModel
+javax/swing/ListModel
+javax/swing/AbstractListModel
+javax/swing/JComboBox$1
+javax/swing/AncestorNotifier
+javax/swing/plaf/metal/MetalComboBoxUI
+javax/swing/plaf/basic/BasicComboBoxUI
+javax/swing/plaf/ComboBoxUI
+javax/swing/plaf/metal/MetalComboBoxUI$MetalComboBoxLayoutManager
+javax/swing/plaf/basic/BasicComboBoxUI$ComboBoxLayoutManager
+javax/swing/plaf/basic/BasicComboPopup
+javax/swing/plaf/basic/ComboPopup
+javax/swing/plaf/basic/BasicComboPopup$EmptyListModelClass
+javax/swing/plaf/basic/BasicLookAndFeel$AWTEventHelper
+java/awt/event/AWTEventListenerProxy
+java/awt/Toolkit$SelectiveAWTEventListener
+java/awt/Toolkit$ToolkitEventMulticaster
+javax/swing/plaf/basic/BasicLookAndFeel$1
+javax/swing/plaf/basic/DefaultMenuLayout
+javax/swing/plaf/metal/MetalBorders$PopupMenuBorder
+javax/swing/plaf/basic/BasicPopupMenuUI$BasicPopupMenuListener
+javax/swing/event/PopupMenuListener
+javax/swing/plaf/basic/BasicPopupMenuUI$BasicMenuKeyListener
+javax/swing/event/MenuKeyListener
+javax/swing/plaf/basic/BasicPopupMenuUI$MouseGrabber
+javax/swing/MenuSelectionManager
+javax/swing/plaf/basic/BasicPopupMenuUI$MenuKeyboardHelper
+javax/swing/plaf/basic/BasicPopupMenuUI$MenuKeyboardHelper$1
+java/awt/event/FocusAdapter
+javax/swing/plaf/basic/BasicComboPopup$1
+javax/swing/JList
+javax/swing/DefaultListSelectionModel
+javax/swing/ListSelectionModel
+javax/swing/plaf/basic/BasicListUI
+javax/swing/plaf/ListUI
+javax/swing/plaf/basic/BasicListUI$ListTransferHandler
+javax/swing/DefaultListCellRenderer$UIResource
+javax/swing/DefaultListCellRenderer
+javax/swing/ListCellRenderer
+javax/swing/plaf/basic/BasicListUI$Handler
+javax/swing/event/ListSelectionListener
+javax/swing/JMenu
+javax/swing/JMenuItem
+javax/swing/event/ListSelectionEvent
+javax/swing/plaf/basic/BasicComboPopup$Handler
+javax/swing/ScrollPaneLayout$UIResource
+javax/swing/ScrollPaneLayout
+javax/swing/ViewportLayout
+javax/swing/plaf/basic/BasicViewportUI
+javax/swing/plaf/ViewportUI
+javax/swing/JScrollPane$ScrollBar
+javax/swing/JScrollBar
+java/awt/Adjustable
+javax/swing/JScrollBar$ModelListener
+javax/swing/plaf/metal/MetalScrollBarUI
+javax/swing/plaf/basic/BasicScrollBarUI
+javax/swing/plaf/ScrollBarUI
+javax/swing/plaf/metal/MetalBumps
+javax/swing/plaf/basic/BasicScrollBarUI$TrackListener
+javax/swing/plaf/basic/BasicScrollBarUI$ArrowButtonListener
+javax/swing/plaf/basic/BasicScrollBarUI$ModelListener
+javax/swing/plaf/metal/MetalScrollBarUI$ScrollBarListener
+javax/swing/plaf/basic/BasicScrollBarUI$PropertyChangeHandler
+javax/swing/plaf/basic/BasicScrollBarUI$Handler
+javax/swing/plaf/basic/BasicScrollBarUI$ScrollListener
+javax/swing/JViewport$ViewListener
+javax/swing/plaf/metal/MetalScrollPaneUI
+javax/swing/plaf/basic/BasicScrollPaneUI
+javax/swing/plaf/ScrollPaneUI
+javax/swing/plaf/metal/MetalBorders$ScrollPaneBorder
+javax/swing/plaf/basic/BasicScrollPaneUI$Handler
+javax/swing/plaf/metal/MetalScrollPaneUI$1
+javax/swing/plaf/basic/BasicComboBoxRenderer$UIResource
+javax/swing/plaf/basic/BasicComboBoxRenderer
+javax/swing/plaf/metal/MetalComboBoxEditor$UIResource
+javax/swing/plaf/metal/MetalComboBoxEditor
+javax/swing/plaf/basic/BasicComboBoxEditor
+javax/swing/ComboBoxEditor
+javax/swing/plaf/basic/BasicComboBoxEditor$BorderlessTextField
+javax/swing/plaf/basic/BasicComboBoxEditor$UIResource
+javax/swing/text/Segment
+java/text/CharacterIterator
+javax/swing/plaf/metal/MetalComboBoxEditor$1
+javax/swing/plaf/metal/MetalComboBoxEditor$EditorBorder
+javax/swing/JToolBar
+javax/swing/plaf/metal/MetalComboBoxUI$MetalPropertyChangeListener
+javax/swing/plaf/basic/BasicComboBoxUI$PropertyChangeHandler
+javax/swing/plaf/basic/BasicComboBoxUI$Handler
+javax/swing/plaf/metal/MetalComboBoxIcon
+javax/swing/plaf/metal/MetalComboBoxButton$1
+javax/swing/plaf/basic/BasicComboBoxUI$DefaultKeySelectionManager
+javax/swing/JComboBox$KeySelectionManager
+javax/swing/plaf/metal/MetalCheckBoxUI
+javax/swing/plaf/metal/MetalIconFactory$CheckBoxIcon
+java/lang/ExceptionInInitializerError
+com/sun/java/swing/plaf/windows/WindowsTabbedPaneUI
+javax/swing/JProgressBar
+javax/swing/JProgressBar$ModelListener
+javax/swing/plaf/metal/MetalProgressBarUI
+javax/swing/plaf/basic/BasicProgressBarUI
+javax/swing/plaf/ProgressBarUI
+javax/swing/plaf/BorderUIResource$LineBorderUIResource
+javax/swing/plaf/basic/BasicProgressBarUI$Handler
+javax/swing/JTable
+javax/swing/event/TableModelListener
+javax/swing/event/TableColumnModelListener
+javax/swing/event/CellEditorListener
+javax/swing/event/RowSorterListener
+javax/swing/tree/TreeModel
+javax/swing/table/JTableHeader
+javax/swing/table/AbstractTableModel
+javax/swing/table/TableModel
+javax/swing/table/TableCellRenderer
+javax/swing/event/TreeExpansionListener
+javax/swing/table/DefaultTableCellRenderer
+javax/swing/JCheckBoxMenuItem
+javax/swing/JTree
+javax/swing/tree/TreeSelectionModel
+javax/swing/tree/DefaultTreeCellRenderer
+javax/swing/tree/TreeCellRenderer
+javax/swing/table/TableCellEditor
+javax/swing/CellEditor
+javax/swing/JToolTip
+javax/swing/table/TableColumn
+javax/swing/table/DefaultTableColumnModel
+javax/swing/table/TableColumnModel
+javax/swing/table/DefaultTableModel
+javax/swing/event/TableModelEvent
+sun/swing/table/DefaultTableCellHeaderRenderer
+sun/swing/table/DefaultTableCellHeaderRenderer$EmptyIcon
+javax/swing/plaf/basic/BasicTableHeaderUI
+javax/swing/plaf/TableHeaderUI
+javax/swing/plaf/basic/BasicTableHeaderUI$1
+javax/swing/plaf/basic/BasicTableHeaderUI$MouseInputHandler
+javax/swing/DefaultCellEditor
+javax/swing/tree/TreeCellEditor
+javax/swing/AbstractCellEditor
+javax/swing/plaf/basic/BasicTableUI
+javax/swing/plaf/TableUI
+javax/swing/plaf/basic/BasicTableUI$TableTransferHandler
+javax/swing/plaf/basic/BasicTableUI$Handler
+javax/swing/tree/DefaultTreeSelectionModel
+javax/swing/tree/TreePath
+javax/swing/plaf/metal/MetalTreeUI
+javax/swing/plaf/basic/BasicTreeUI
+javax/swing/plaf/TreeUI
+javax/swing/plaf/basic/BasicTreeUI$Actions
+javax/swing/plaf/basic/BasicTreeUI$TreeTransferHandler
+javax/swing/plaf/metal/MetalTreeUI$LineListener
+javax/swing/plaf/basic/BasicTreeUI$Handler
+javax/swing/event/TreeModelListener
+javax/swing/event/TreeSelectionListener
+javax/swing/event/SwingPropertyChangeSupport
+javax/swing/tree/VariableHeightLayoutCache
+javax/swing/tree/AbstractLayoutCache
+javax/swing/tree/RowMapper
+javax/swing/plaf/basic/BasicTreeUI$NodeDimensionsHandler
+javax/swing/tree/AbstractLayoutCache$NodeDimensions
+javax/swing/JTree$TreeModelHandler
+javax/swing/tree/VariableHeightLayoutCache$TreeStateNode
+javax/swing/tree/DefaultMutableTreeNode
+javax/swing/tree/MutableTreeNode
+javax/swing/tree/DefaultMutableTreeNode$PreorderEnumeration
+java/util/Vector$1
+javax/swing/event/TableColumnModelEvent
+javax/swing/JPopupMenu$Separator
+javax/swing/JSeparator
+java/text/ParseException
+java/text/NumberFormat$Field
+javax/swing/text/GapContent$InsertUndo
+javax/swing/undo/AbstractUndoableEdit
+javax/swing/undo/UndoableEdit
+javax/swing/text/AbstractDocument$DefaultDocumentEvent
+javax/swing/event/DocumentEvent
+javax/swing/undo/CompoundEdit
+javax/swing/event/DocumentEvent$EventType
+javax/swing/text/Utilities
+javax/swing/text/SegmentCache
+javax/swing/text/SegmentCache$CachedSegment
+javax/swing/event/DocumentEvent$ElementChange
+javax/swing/event/UndoableEditEvent
+javax/swing/event/UndoableEditListener
+java/awt/Canvas
+java/util/Locale$Category
+java/util/Locale$1
+javax/swing/filechooser/FileFilter
+java/io/FileWriter
+javax/swing/tree/DefaultTreeModel
+javax/swing/tree/DefaultTreeCellEditor
+javax/swing/tree/DefaultTreeCellEditor$1
+javax/swing/tree/DefaultTreeCellEditor$DefaultTextField
+javax/swing/DefaultCellEditor$1
+javax/swing/DefaultCellEditor$EditorDelegate
+javax/swing/tree/DefaultTreeCellEditor$EditorContainer
+javax/swing/JTree$TreeSelectionRedirector
+javax/swing/JMenuItem$MenuItemFocusListener
+javax/swing/plaf/basic/BasicMenuItemUI
+javax/swing/plaf/MenuItemUI
+javax/swing/plaf/metal/MetalBorders$MenuItemBorder
+javax/swing/plaf/metal/MetalIconFactory$MenuItemArrowIcon
+sun/swing/MenuItemLayoutHelper
+javax/swing/plaf/basic/BasicMenuItemUI$Handler
+javax/swing/event/MenuDragMouseListener
+javax/swing/event/TreeModelEvent
+javax/swing/JSplitPane
+javax/swing/plaf/metal/MetalSplitPaneUI
+javax/swing/plaf/basic/BasicSplitPaneUI
+javax/swing/plaf/SplitPaneUI
+javax/swing/plaf/basic/BasicSplitPaneDivider
+javax/swing/plaf/basic/BasicBorders$SplitPaneBorder
+javax/swing/plaf/metal/MetalSplitPaneDivider
+javax/swing/plaf/basic/BasicSplitPaneDivider$DividerLayout
+javax/swing/plaf/basic/BasicSplitPaneDivider$MouseHandler
+javax/swing/plaf/basic/BasicBorders$SplitPaneDividerBorder
+javax/swing/plaf/basic/BasicSplitPaneUI$BasicHorizontalLayoutManager
+javax/swing/plaf/basic/BasicSplitPaneUI$1
+javax/swing/plaf/basic/BasicSplitPaneUI$Handler
+javax/swing/plaf/metal/MetalSplitPaneDivider$1
+javax/swing/plaf/basic/BasicSplitPaneDivider$OneTouchActionHandler
+javax/swing/plaf/metal/MetalSplitPaneDivider$2
+javax/swing/border/TitledBorder
+javax/swing/plaf/basic/BasicTextAreaUI
+javax/swing/text/AbstractDocument$ElementEdit
+java/util/Random
+java/util/concurrent/atomic/AtomicLong
+java/io/InterruptedIOException
+java/net/NoRouteToHostException
+java/net/BindException
+javax/swing/tree/PathPlaceHolder
+javax/swing/event/TreeSelectionEvent
+javax/swing/JList$3
+javax/swing/JList$ListSelectionHandler
+javax/swing/JSlider
+javax/swing/JSlider$ModelListener
+javax/swing/plaf/metal/MetalSliderUI
+javax/swing/plaf/basic/BasicSliderUI
+javax/swing/plaf/SliderUI
+javax/swing/plaf/basic/BasicSliderUI$Actions
+javax/swing/plaf/metal/MetalIconFactory$HorizontalSliderThumbIcon
+javax/swing/plaf/metal/MetalIconFactory$VerticalSliderThumbIcon
+javax/swing/plaf/basic/BasicSliderUI$TrackListener
+javax/swing/plaf/basic/BasicSliderUI$Handler
+javax/swing/plaf/basic/BasicSliderUI$ScrollListener
+javax/swing/plaf/metal/MetalSliderUI$MetalPropertyListener
+javax/swing/plaf/basic/BasicSliderUI$PropertyChangeHandler
+java/util/concurrent/ConcurrentHashMap$KeyIterator
+java/util/concurrent/ConcurrentHashMap$BaseIterator
+java/util/concurrent/ConcurrentHashMap$Traverser
+sun/font/Type1Font$1
+java/nio/channels/FileChannel$MapMode
+sun/nio/ch/FileChannelImpl$Unmapper
+sun/nio/ch/Util$4
+java/nio/DirectByteBufferR
+sun/nio/cs/US_ASCII$Decoder
+sun/font/SunFontManager$10
+java/util/concurrent/ConcurrentHashMap$ValueIterator
+javax/swing/DefaultListModel
+javax/swing/event/ListDataEvent
+javax/sound/sampled/DataLine
+javax/sound/sampled/Line
+javax/sound/sampled/LineUnavailableException
+javax/sound/sampled/UnsupportedAudioFileException
+javax/sound/sampled/Line$Info
+javax/sound/sampled/DataLine$Info
+javax/sound/sampled/Control$Type
+javax/sound/sampled/FloatControl$Type
+javax/swing/JMenuBar
+javax/swing/plaf/basic/BasicMenuBarUI
+javax/swing/plaf/MenuBarUI
+javax/swing/plaf/metal/MetalBorders$MenuBarBorder
+javax/swing/plaf/basic/BasicMenuBarUI$Handler
+javax/swing/KeyboardManager
+javax/swing/JRadioButtonMenuItem
+javax/swing/JMenu$MenuChangeListener
+javax/swing/plaf/basic/BasicMenuUI
+javax/swing/plaf/metal/MetalIconFactory$MenuArrowIcon
+javax/swing/plaf/basic/BasicMenuUI$Handler
+javax/swing/JMenuItem$AccessibleJMenuItem
+javax/swing/AbstractButton$AccessibleAbstractButton
+javax/accessibility/AccessibleAction
+javax/accessibility/AccessibleValue
+javax/accessibility/AccessibleText
+javax/accessibility/AccessibleExtendedComponent
+javax/accessibility/AccessibleComponent
+javax/swing/JComponent$AccessibleJComponent
+java/awt/Container$AccessibleAWTContainer
+java/awt/Component$AccessibleAWTComponent
+javax/accessibility/AccessibleContext$1
+sun/awt/AWTAccessor$AccessibleContextAccessor
+javax/accessibility/AccessibleRelationSet
+javax/swing/JMenu$WinListener
+java/awt/event/WindowAdapter
+javax/swing/plaf/metal/MetalPopupMenuSeparatorUI
+javax/swing/plaf/metal/MetalSeparatorUI
+javax/swing/plaf/basic/BasicSeparatorUI
+javax/swing/plaf/SeparatorUI
+javax/accessibility/AccessibleState
+javax/accessibility/AccessibleBundle
+javax/swing/plaf/basic/BasicCheckBoxMenuItemUI
+javax/swing/plaf/metal/MetalIconFactory$CheckBoxMenuItemIcon
+javax/swing/JCheckBoxMenuItem$AccessibleJCheckBoxMenuItem
+javax/swing/plaf/basic/BasicRadioButtonMenuItemUI
+javax/swing/plaf/metal/MetalIconFactory$RadioButtonMenuItemIcon
+java/awt/event/ContainerEvent
+sun/awt/image/ImageDecoder$1
+java/awt/im/InputContext
+sun/awt/im/InputMethodContext
+java/awt/im/spi/InputMethodContext
+java/awt/im/InputMethodRequests
+sun/awt/im/InputContext
+sun/awt/im/InputMethodManager
+sun/awt/im/ExecutableInputMethodManager
+sun/awt/X11/XInputMethodDescriptor
+sun/awt/X11InputMethodDescriptor
+java/awt/im/spi/InputMethodDescriptor
+sun/awt/im/InputMethodLocator
+sun/awt/im/ExecutableInputMethodManager$3
+javax/swing/JTabbedPane$Page
+java/net/DatagramSocket
+java/net/MulticastSocket
+java/net/DatagramPacket
+java/net/DatagramPacket$1
+java/net/DefaultDatagramSocketImplFactory
+java/net/PlainDatagramSocketImpl
+java/net/AbstractPlainDatagramSocketImpl
+java/net/DatagramSocketImpl
+java/net/AbstractPlainDatagramSocketImpl$1
+java/net/NetworkInterface
+java/net/NetworkInterface$1
+java/net/InterfaceAddress
+java/net/DefaultInterface
+java/net/DatagramSocket$1
+java/net/SocketOption
+sun/net/ResourceManager
+java/text/Collator
+sun/util/locale/provider/CollatorProviderImpl
+java/util/Collections$UnmodifiableList$1
+sun/text/resources/CollationData
+java/text/RuleBasedCollator
+java/text/RBCollationTables
+java/net/ServerSocket
+java/text/RBTableBuilder
+java/text/RBCollationTables$BuildAPI
+sun/text/IntHashtable
+sun/text/UCompactIntArray
+sun/text/normalizer/NormalizerImpl
+sun/text/normalizer/ICUData
+sun/text/normalizer/NormalizerDataReader
+sun/text/normalizer/ICUBinary$Authenticate
+sun/text/normalizer/ICUBinary
+sun/text/normalizer/NormalizerImpl$FCDTrieImpl
+sun/text/normalizer/Trie$DataManipulate
+sun/text/normalizer/NormalizerImpl$NormTrieImpl
+sun/text/normalizer/NormalizerImpl$AuxTrieImpl
+sun/text/normalizer/IntTrie
+sun/text/normalizer/Trie
+sun/text/normalizer/CharTrie
+sun/text/normalizer/CharTrie$FriendAgent
+sun/text/normalizer/UnicodeSet
+sun/text/normalizer/UnicodeMatcher
+sun/text/normalizer/NormalizerImpl$DecomposeArgs
+java/text/MergeCollation
+java/text/PatternEntry$Parser
+java/text/PatternEntry
+java/text/EntryPair
+sun/text/ComposedCharIter
+sun/text/normalizer/UTF16
+sun/net/www/protocol/http/Handler
+java/security/SignatureException
+java/security/InvalidKeyException
+java/security/KeyException
+java/security/Signature
+java/security/SignatureSpi
+java/io/ObjectInputStream$BlockDataInputStream
+java/io/ObjectInputStream$PeekInputStream
+java/io/ObjectInputStream$HandleTable
+java/io/ObjectInputStream$HandleTable$HandleList
+java/io/ObjectInputStream$ValidationList
+java/io/Bits
+java/io/ObjectStreamClass
+java/io/ObjectOutputStream
+java/io/ObjectOutput
+sun/security/provider/DSAPublicKey
+java/security/interfaces/DSAPublicKey
+java/security/interfaces/DSAKey
+java/security/PublicKey
+java/security/Key
+sun/security/x509/X509Key
+java/io/ObjectStreamClass$Caches
+java/io/ObjectStreamClass$WeakClassKey
+java/io/ObjectStreamClass$EntryFuture
+java/lang/reflect/Proxy
+java/lang/reflect/InvocationHandler
+java/lang/reflect/WeakCache
+java/lang/reflect/Proxy$KeyFactory
+java/lang/reflect/Proxy$ProxyClassFactory
+java/io/Externalizable
+java/io/ObjectStreamClass$2
+java/util/ComparableTimSort
+sun/security/x509/AlgorithmId
+sun/security/util/DerEncoder
+sun/reflect/SerializationConstructorAccessorImpl
+sun/security/util/BitArray
+sun/reflect/UnsafeQualifiedStaticLongFieldAccessorImpl
+java/io/ObjectStreamClass$FieldReflectorKey
+java/io/ObjectStreamClass$FieldReflector
+java/io/ObjectStreamClass$1
+java/io/DataOutputStream
+java/io/ObjectStreamClass$MemberSignature
+java/io/ObjectStreamClass$3
+sun/security/util/DerOutputStream
+java/io/ObjectStreamClass$4
+java/io/ObjectStreamClass$5
+sun/security/util/DerValue
+java/security/MessageDigest
+java/security/MessageDigestSpi
+sun/security/jca/GetInstance
+sun/security/jca/Providers
+java/lang/InheritableThreadLocal
+sun/security/jca/ProviderList
+sun/security/jca/ProviderConfig
+java/math/BigInteger
+java/security/Provider
+sun/security/jca/ProviderList$3
+sun/security/jca/ProviderList$1
+java/security/Provider$ServiceKey
+java/security/Provider$EngineDescription
+java/security/interfaces/DSAParams
+sun/security/jca/ProviderList$2
+sun/security/jca/ProviderConfig$2
+java/io/ObjectStreamClass$ClassDataSlot
+sun/security/provider/Sun
+java/io/SerialCallbackContext
+sun/security/provider/SunEntries
+sun/security/provider/SunEntries$1
+sun/security/provider/NativePRNG
+java/security/SecureRandomSpi
+sun/security/provider/NativePRNG$Variant
+sun/security/util/DerInputStream
+sun/security/provider/NativePRNG$1
+sun/security/provider/NativePRNG$2
+sun/security/provider/NativePRNG$RandomIO
+sun/security/util/DerInputBuffer
+sun/security/provider/NativePRNG$Blocking
+sun/security/provider/NativePRNG$NonBlocking
+sun/security/util/ObjectIdentifier
+java/security/Provider$Service
+java/security/Provider$UString
+sun/security/provider/SHA
+sun/security/provider/DigestBase
+sun/security/jca/GetInstance$Instance
+java/security/MessageDigest$Delegate
+sun/security/provider/ByteArrayAccess
+java/io/ObjectOutputStream$BlockDataOutputStream
+java/security/AlgorithmParameters
+java/io/ObjectOutputStream$HandleTable
+java/io/ObjectOutputStream$ReplaceTable
+java/security/AlgorithmParametersSpi
+sun/security/provider/DSAParameters
+sun/security/util/ByteArrayLexOrder
+sun/security/util/ByteArrayTagOrder
+sun/security/util/DerIndefLenConverter
+java/io/ObjectStreamClass$ExceptionInfo
+java/io/ObjectInputStream$GetFieldImpl
+java/io/ObjectInputStream$GetField
+java/math/BigInteger$UnsafeHolder
+sun/security/jca/ServiceId
+sun/security/jca/ProviderList$ServiceList
+sun/security/jca/ProviderList$ServiceList$1
+java/security/Signature$Delegate
+java/util/ArrayList$SubList
+java/util/ArrayList$SubList$1
+java/security/interfaces/DSAPrivateKey
+java/security/PrivateKey
+javax/security/auth/Destroyable
+sun/security/provider/DSA$SHA1withDSA
+sun/security/provider/DSA$LegacyDSA
+sun/security/provider/DSA
+java/security/spec/DSAParameterSpec
+java/security/spec/AlgorithmParameterSpec
+java/math/MutableBigInteger
+java/math/SignedMutableBigInteger
+javax/swing/TimerQueue
+java/util/concurrent/DelayQueue
+java/util/concurrent/BlockingQueue
+java/util/AbstractQueue
+java/util/PriorityQueue
+javax/swing/TimerQueue$1
+javax/swing/TimerQueue$DelayedTimer
+java/util/concurrent/Delayed
+java/util/concurrent/TimeUnit
+java/util/concurrent/TimeUnit$1
+java/util/concurrent/TimeUnit$2
+java/util/concurrent/TimeUnit$3
+java/util/concurrent/TimeUnit$4
+java/util/concurrent/TimeUnit$5
+java/util/concurrent/TimeUnit$6
+java/util/concurrent/TimeUnit$7
+java/awt/Window$1DisposeAction
+java/awt/EventQueue$1AWTInvocationLock
+sun/awt/X11/XUnmapEvent
+java/awt/LightweightDispatcher$2
+java/awt/Component$FlipBufferStrategy
+java/awt/SentEvent
+sun/java2d/cmm/CMSManager
+java/awt/image/DataBufferInt
+java/awt/image/SinglePixelPackedSampleModel
+sun/awt/image/IntegerInterleavedRaster
+sun/awt/X11/XDropTargetRegistry
+sun/awt/X11/XEmbeddedFramePeer
+sun/awt/X11/XDragAndDropProtocols
+sun/awt/X11/XDropTargetContextPeer
+sun/awt/dnd/SunDropTargetContextPeer
+java/awt/dnd/peer/DropTargetContextPeer
+java/awt/datatransfer/Transferable
+sun/awt/X11/XDropTargetContextPeer$XDropTargetProtocolListenerImpl
+sun/awt/X11/XDropTargetProtocolListener
+sun/awt/X11/XDnDDragSourceProtocol
+sun/awt/X11/XDragSourceProtocol
+sun/awt/X11/MotifDnDDragSourceProtocol
+sun/awt/X11/XDnDDropTargetProtocol
+sun/awt/X11/XDropTargetProtocol
+sun/awt/X11/MotifDnDDropTargetProtocol
+sun/awt/X11/XErrorHandler$VerifyChangePropertyHandler
+sun/awt/X11/XDnDConstants
+sun/awt/X11/XSelection
+sun/awt/X11/XSelection$IncrementalTransferHandler
+sun/awt/X11/XSelection$SelectionEventHandler
+sun/awt/X11/MotifDnDConstants
+javax/swing/JLayer
+javax/swing/JInternalFrame
+javax/swing/KeyboardManager$ComponentKeyStrokePair
+sun/awt/EmbeddedFrame
+sun/swing/MenuItemLayoutHelper$RectSize
+javax/swing/JTable$2
+javax/swing/JTable$Resizable3
+javax/swing/JTable$Resizable2
+javax/swing/JTable$5
+javax/swing/event/AncestorEvent
+java/awt/Label
+sun/awt/X11/XLabelPeer
+java/awt/peer/LabelPeer
+sun/awt/TimedWindowEvent
+java/awt/DefaultKeyboardFocusManager$DefaultKeyboardFocusManagerSentEvent
+sun/awt/CausedFocusEvent$Cause
+java/awt/KeyboardFocusManager$HeavyweightFocusRequest
+java/awt/DefaultKeyboardFocusManager$TypeAheadMarker
+java/awt/KeyboardFocusManager$LightweightFocusRequest
+sun/awt/CausedFocusEvent
+java/awt/KeyboardFocusManager$3
+sun/awt/X11/XInputMethod
+sun/awt/X11InputMethod
+sun/awt/im/InputMethodAdapter
+java/awt/im/spi/InputMethod
+java/awt/Event
+java/net/Authenticator
+java/lang/Throwable$WrappedPrintStream
+java/lang/Throwable$PrintStreamOrWriter
+sun/awt/image/PNGImageDecoder
+sun/awt/image/PNGFilterInputStream
+sun/util/locale/provider/TimeZoneNameUtility
+sun/util/locale/provider/TimeZoneNameProviderImpl
+sun/util/locale/provider/TimeZoneNameUtility$TimeZoneNameGetter
+sun/util/resources/TimeZoneNames
+sun/util/resources/TimeZoneNamesBundle
+sun/util/resources/en/TimeZoneNames_en
+sun/awt/image/OffScreenImage
+java/lang/ProcessBuilder
+java/lang/ProcessImpl
+java/lang/UNIXProcess
+java/lang/Process
+java/lang/UNIXProcess$Platform
+java/lang/UNIXProcess$LaunchMechanism
+java/util/EnumSet
+java/util/RegularEnumSet
+sun/java2d/x11/X11SurfaceDataProxy$Opaque
+java/lang/UNIXProcess$1
+java/util/concurrent/Executor
+java/util/concurrent/ThreadFactory
+java/util/concurrent/Executors
+java/util/concurrent/ThreadPoolExecutor
+java/util/concurrent/AbstractExecutorService
+java/util/concurrent/ExecutorService
+java/util/concurrent/ThreadPoolExecutor$AbortPolicy
+java/util/concurrent/RejectedExecutionHandler
+java/util/concurrent/SynchronousQueue
+java/util/concurrent/SynchronousQueue$TransferStack
+java/util/concurrent/SynchronousQueue$Transferer
+java/util/concurrent/SynchronousQueue$TransferStack$SNode
+java/lang/UNIXProcess$ProcessPipeOutputStream
+java/lang/UNIXProcess$ProcessPipeInputStream
+java/util/concurrent/ThreadPoolExecutor$Worker
+java/lang/ProcessBuilder$NullOutputStream
+java/io/FilterReader
+sun/awt/X11/XClipboard
+sun/awt/X11/OwnershipListener
+sun/awt/datatransfer/SunClipboard
+java/awt/datatransfer/Clipboard
+java/io/EOFException
+java/util/jar/JarFile$JarEntryIterator
+java/util/zip/ZipFile$ZipEntryIterator
+java/lang/IllegalAccessError
+java/text/MessageFormat
+java/text/MessageFormat$Field
+java/util/Hashtable$ValueCollection
+javax/swing/event/CaretListener
+javax/swing/plaf/metal/MetalButtonUI
+javax/swing/plaf/metal/MetalToggleButtonUI
+javax/swing/plaf/metal/MetalBorders$ToggleButtonBorder
+javax/swing/event/MenuEvent
+javax/swing/border/MatteBorder
+sun/font/StandardGlyphVector
+java/awt/font/GlyphVector
+sun/font/StandardGlyphVector$GlyphStrike
+sun/font/CoreMetrics
+sun/font/FontLineMetrics
+java/awt/font/LineMetrics
+javax/swing/JToolBar$DefaultToolBarLayout
+javax/swing/plaf/metal/MetalToolBarUI
+javax/swing/plaf/basic/BasicToolBarUI
+javax/swing/plaf/ToolBarUI
+javax/swing/plaf/metal/MetalBorders$ToolBarBorder
+javax/swing/plaf/metal/MetalBorders$RolloverButtonBorder
+javax/swing/plaf/metal/MetalBorders$RolloverMarginBorder
+javax/swing/plaf/basic/BasicBorders$RolloverMarginBorder
+javax/swing/plaf/metal/MetalToolBarUI$MetalDockingListener
+javax/swing/plaf/basic/BasicToolBarUI$DockingListener
+javax/swing/plaf/basic/BasicToolBarUI$Handler
+javax/swing/JToolBar$Separator
+javax/swing/plaf/basic/BasicToolBarSeparatorUI
+java/awt/event/AdjustmentEvent
+java/awt/MenuBar
+sun/awt/X11/XErrorEvent
+# eea35d9d56e0006e
diff --git a/FCL/src/main/assets/java/lib/cmm/CIEXYZ.pf b/FCL/src/main/assets/java/lib/cmm/CIEXYZ.pf
new file mode 100644
index 000000000..48c9dd803
Binary files /dev/null and b/FCL/src/main/assets/java/lib/cmm/CIEXYZ.pf differ
diff --git a/FCL/src/main/assets/java/lib/cmm/GRAY.pf b/FCL/src/main/assets/java/lib/cmm/GRAY.pf
new file mode 100644
index 000000000..8af309cc0
Binary files /dev/null and b/FCL/src/main/assets/java/lib/cmm/GRAY.pf differ
diff --git a/FCL/src/main/assets/java/lib/cmm/LINEAR_RGB.pf b/FCL/src/main/assets/java/lib/cmm/LINEAR_RGB.pf
new file mode 100644
index 000000000..3e0b1777a
Binary files /dev/null and b/FCL/src/main/assets/java/lib/cmm/LINEAR_RGB.pf differ
diff --git a/FCL/src/main/assets/java/lib/cmm/PYCC.pf b/FCL/src/main/assets/java/lib/cmm/PYCC.pf
new file mode 100644
index 000000000..0cee01589
Binary files /dev/null and b/FCL/src/main/assets/java/lib/cmm/PYCC.pf differ
diff --git a/FCL/src/main/assets/java/lib/cmm/sRGB.pf b/FCL/src/main/assets/java/lib/cmm/sRGB.pf
new file mode 100644
index 000000000..7b552add6
Binary files /dev/null and b/FCL/src/main/assets/java/lib/cmm/sRGB.pf differ
diff --git a/FCL/src/main/assets/java/lib/content-types.properties b/FCL/src/main/assets/java/lib/content-types.properties
new file mode 100644
index 000000000..81c132c52
--- /dev/null
+++ b/FCL/src/main/assets/java/lib/content-types.properties
@@ -0,0 +1,280 @@
+#sun.net.www MIME content-types table
+#
+# Property fields:
+#
+# ::= 'description' '='
+# ::= 'file_extensions' '='
+# ::= 'icon' '='
+# ::= 'browser' | 'application' | 'save' | 'unknown'
+# ::= 'application' '='
+#
+
+#
+# The "we don't know anything about this data" type(s).
+# Used internally to mark unrecognized types.
+#
+content/unknown= description=Unknown Content
+unknown/unknown= description=Unknown Data Type
+
+#
+# The template we should use for temporary files when launching an application
+# to view a document of given type.
+#
+temp.file.template= /tmp/%s
+
+#
+# The "real" types.
+#
+application/octet-stream= \
+ description=Generic Binary Stream;\
+ file_extensions=.saveme,.dump,.hqx,.arc,.o,.a,.bin,.exe,.z,.gz
+
+application/oda= \
+ description=ODA Document;\
+ file_extensions=.oda
+
+application/pdf= \
+ description=Adobe PDF Format;\
+ file_extensions=.pdf
+
+application/postscript= \
+ description=Postscript File;\
+ file_extensions=.eps,.ai,.ps;\
+ icon=ps;\
+ action=application;\
+ application=imagetool %s
+
+application/x-dvi= \
+ description=TeX DVI File;\
+ file_extensions=.dvi;\
+ action=application;\
+ application=xdvi %s
+
+application/x-hdf= \
+ description=Hierarchical Data Format;\
+ file_extensions=.hdf;\
+ action=save
+
+application/x-latex= \
+ description=LaTeX Source;\
+ file_extensions=.latex
+
+application/x-netcdf= \
+ description=Unidata netCDF Data Format;\
+ file_extensions=.nc,.cdf;\
+ action=save
+
+application/x-tex= \
+ description=TeX Source;\
+ file_extensions=.tex
+
+application/x-texinfo= \
+ description=Gnu Texinfo;\
+ file_extensions=.texinfo,.texi
+
+application/x-troff= \
+ description=Troff Source;\
+ file_extensions=.t,.tr,.roff;\
+ action=application;\
+ application=xterm -title troff -e sh -c \"nroff %s | col | more -w\"
+
+application/x-troff-man= \
+ description=Troff Manpage Source;\
+ file_extensions=.man;\
+ action=application;\
+ application=xterm -title troff -e sh -c \"nroff -man %s | col | more -w\"
+
+application/x-troff-me= \
+ description=Troff ME Macros;\
+ file_extensions=.me;\
+ action=application;\
+ application=xterm -title troff -e sh -c \"nroff -me %s | col | more -w\"
+
+application/x-troff-ms= \
+ description=Troff MS Macros;\
+ file_extensions=.ms;\
+ action=application;\
+ application=xterm -title troff -e sh -c \"nroff -ms %s | col | more -w\"
+
+application/x-wais-source= \
+ description=Wais Source;\
+ file_extensions=.src,.wsrc
+
+application/zip= \
+ description=Zip File;\
+ file_extensions=.zip;\
+ icon=zip;\
+ action=save
+
+application/x-bcpio= \
+ description=Old Binary CPIO Archive;\
+ file_extensions=.bcpio; action=save
+
+application/x-cpio= \
+ description=Unix CPIO Archive;\
+ file_extensions=.cpio; action=save
+
+application/x-gtar= \
+ description=Gnu Tar Archive;\
+ file_extensions=.gtar;\
+ icon=tar;\
+ action=save
+
+application/x-shar= \
+ description=Shell Archive;\
+ file_extensions=.sh,.shar;\
+ action=save
+
+application/x-sv4cpio= \
+ description=SVR4 CPIO Archive;\
+ file_extensions=.sv4cpio; action=save
+
+application/x-sv4crc= \
+ description=SVR4 CPIO with CRC;\
+ file_extensions=.sv4crc; action=save
+
+application/x-tar= \
+ description=Tar Archive;\
+ file_extensions=.tar;\
+ icon=tar;\
+ action=save
+
+application/x-ustar= \
+ description=US Tar Archive;\
+ file_extensions=.ustar;\
+ action=save
+
+audio/basic= \
+ description=Basic Audio;\
+ file_extensions=.snd,.au;\
+ icon=audio;\
+ action=application;\
+ application=audiotool %s
+
+audio/x-aiff= \
+ description=Audio Interchange Format File;\
+ file_extensions=.aifc,.aif,.aiff;\
+ icon=aiff
+
+audio/x-wav= \
+ description=Wav Audio;\
+ file_extensions=.wav;\
+ icon=wav
+
+image/gif= \
+ description=GIF Image;\
+ file_extensions=.gif;\
+ icon=gif;\
+ action=browser
+
+image/ief= \
+ description=Image Exchange Format;\
+ file_extensions=.ief
+
+image/jpeg= \
+ description=JPEG Image;\
+ file_extensions=.jfif,.jfif-tbnl,.jpe,.jpg,.jpeg;\
+ icon=jpeg;\
+ action=browser;\
+ application=imagetool %s
+
+image/tiff= \
+ description=TIFF Image;\
+ file_extensions=.tif,.tiff;\
+ icon=tiff
+
+image/vnd.fpx= \
+ description=FlashPix Image;\
+ file_extensions=.fpx,.fpix
+
+image/x-cmu-rast= \
+ description=CMU Raster Image;\
+ file_extensions=.ras
+
+image/x-portable-anymap= \
+ description=PBM Anymap Format;\
+ file_extensions=.pnm
+
+image/x-portable-bitmap= \
+ description=PBM Bitmap Format;\
+ file_extensions=.pbm
+
+image/x-portable-graymap= \
+ description=PBM Graymap Format;\
+ file_extensions=.pgm
+
+image/x-portable-pixmap= \
+ description=PBM Pixmap Format;\
+ file_extensions=.ppm
+
+image/x-rgb= \
+ description=RGB Image;\
+ file_extensions=.rgb
+
+image/x-xbitmap= \
+ description=X Bitmap Image;\
+ file_extensions=.xbm,.xpm
+
+image/x-xwindowdump= \
+ description=X Window Dump Image;\
+ file_extensions=.xwd
+
+image/png= \
+ description=PNG Image;\
+ file_extensions=.png;\
+ icon=png;\
+ action=browser
+
+image/bmp= \
+ description=Bitmap Image;\
+ file_extensions=.bmp;
+
+text/html= \
+ description=HTML Document;\
+ file_extensions=.htm,.html;\
+ icon=html
+
+text/plain= \
+ description=Plain Text;\
+ file_extensions=.text,.c,.cc,.c++,.h,.pl,.txt,.java,.el;\
+ icon=text;\
+ action=browser
+
+text/tab-separated-values= \
+ description=Tab Separated Values Text;\
+ file_extensions=.tsv
+
+text/x-setext= \
+ description=Structure Enhanced Text;\
+ file_extensions=.etx
+
+video/mpeg= \
+ description=MPEG Video Clip;\
+ file_extensions=.mpg,.mpe,.mpeg;\
+ icon=mpeg;\
+ action=application;\
+ application=mpeg_play %s
+
+video/quicktime= \
+ description=QuickTime Video Clip;\
+ file_extensions=.mov,.qt
+
+application/x-troff-msvideo= \
+ description=AVI Video;\
+ file_extensions=.avi;\
+ icon=avi
+
+video/x-sgi-movie= \
+ description=SGI Movie;\
+ file_extensions=.movie,.mv
+
+message/rfc822= \
+ description=Internet Email Message;\
+ file_extensions=.mime
+
+application/xml= \
+ description=XML document;\
+ file_extensions=.xml
+
+
+
diff --git a/FCL/src/main/assets/java/lib/currency.data b/FCL/src/main/assets/java/lib/currency.data
new file mode 100644
index 000000000..6be2222cc
Binary files /dev/null and b/FCL/src/main/assets/java/lib/currency.data differ
diff --git a/FCL/src/main/assets/java/lib/ext/cldrdata.jar b/FCL/src/main/assets/java/lib/ext/cldrdata.jar
new file mode 100644
index 000000000..9abe16baa
Binary files /dev/null and b/FCL/src/main/assets/java/lib/ext/cldrdata.jar differ
diff --git a/FCL/src/main/assets/java/lib/ext/dnsns.jar b/FCL/src/main/assets/java/lib/ext/dnsns.jar
new file mode 100644
index 000000000..63035a7fc
Binary files /dev/null and b/FCL/src/main/assets/java/lib/ext/dnsns.jar differ
diff --git a/FCL/src/main/assets/java/lib/ext/jaccess.jar b/FCL/src/main/assets/java/lib/ext/jaccess.jar
new file mode 100644
index 000000000..63adcd9bb
Binary files /dev/null and b/FCL/src/main/assets/java/lib/ext/jaccess.jar differ
diff --git a/FCL/src/main/assets/java/lib/ext/localedata.jar b/FCL/src/main/assets/java/lib/ext/localedata.jar
new file mode 100644
index 000000000..5dbc31690
Binary files /dev/null and b/FCL/src/main/assets/java/lib/ext/localedata.jar differ
diff --git a/FCL/src/main/assets/java/lib/ext/meta-index b/FCL/src/main/assets/java/lib/ext/meta-index
new file mode 100644
index 000000000..c66e758a7
--- /dev/null
+++ b/FCL/src/main/assets/java/lib/ext/meta-index
@@ -0,0 +1,28 @@
+% VERSION 2
+% WARNING: this file is auto-generated; do not edit
+% UNSUPPORTED: this file and its format may change and/or
+% may be removed in a future release
+! cldrdata.jar
+sun/text
+sun/util
+# dnsns.jar
+META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor
+sun/net
+! jaccess.jar
+com/sun/java/accessibility/
+# localedata.jar
+sun/text
+sun/util
+# nashorn.jar
+jdk/nashorn
+META-INF/services/javax.script.ScriptEngineFactory
+jdk/internal
+! sunec.jar
+sun/security
+! sunjce_provider.jar
+com/sun/crypto/
+! sunpkcs11.jar
+sun/security
+# zipfs.jar
+META-INF/services/java.nio.file.spi.FileSystemProvider
+com/sun/nio/
diff --git a/FCL/src/main/assets/java/lib/ext/nashorn.jar b/FCL/src/main/assets/java/lib/ext/nashorn.jar
new file mode 100644
index 000000000..f808f2b9b
Binary files /dev/null and b/FCL/src/main/assets/java/lib/ext/nashorn.jar differ
diff --git a/FCL/src/main/assets/java/lib/ext/sunec.jar b/FCL/src/main/assets/java/lib/ext/sunec.jar
new file mode 100644
index 000000000..91fb9648e
Binary files /dev/null and b/FCL/src/main/assets/java/lib/ext/sunec.jar differ
diff --git a/FCL/src/main/assets/java/lib/ext/sunjce_provider.jar b/FCL/src/main/assets/java/lib/ext/sunjce_provider.jar
new file mode 100644
index 000000000..31ad3b320
Binary files /dev/null and b/FCL/src/main/assets/java/lib/ext/sunjce_provider.jar differ
diff --git a/FCL/src/main/assets/java/lib/ext/sunpkcs11.jar b/FCL/src/main/assets/java/lib/ext/sunpkcs11.jar
new file mode 100644
index 000000000..bd30b5a62
Binary files /dev/null and b/FCL/src/main/assets/java/lib/ext/sunpkcs11.jar differ
diff --git a/FCL/src/main/assets/java/lib/ext/zipfs.jar b/FCL/src/main/assets/java/lib/ext/zipfs.jar
new file mode 100644
index 000000000..1c232264d
Binary files /dev/null and b/FCL/src/main/assets/java/lib/ext/zipfs.jar differ
diff --git a/FCL/src/main/assets/java/lib/flavormap.properties b/FCL/src/main/assets/java/lib/flavormap.properties
new file mode 100644
index 000000000..223002a69
--- /dev/null
+++ b/FCL/src/main/assets/java/lib/flavormap.properties
@@ -0,0 +1,78 @@
+#
+# This properties file is used to initialize the default
+# java.awt.datatransfer.SystemFlavorMap. It contains the X11 platform-specific,
+# default mappings between common X11 selection atoms and platform-independent
+# MIME type strings, which will be converted into
+# java.awt.datatransfer.DataFlavors.
+#
+# These default mappings may be augmented by specifying the
+#
+# AWT.DnD.flavorMapFileURL
+#
+# property in the appropriate awt.properties file. The specified properties URL
+# will be loaded into the SystemFlavorMap.
+#
+# The standard format is:
+#
+# =
+#
+# should be a string identifier that the native platform will
+# recognize as a valid data format. should specify both a MIME
+# primary type and a MIME subtype separated by a '/'. The MIME type may include
+# parameters, where each parameter is a key/value pair separated by '=', and
+# where each parameter to the MIME type is separated by a ';'.
+#
+# Because SystemFlavorMap implements FlavorTable, developers are free to
+# duplicate both native keys and DataFlavor values. If a mapping contains a
+# duplicate key or value, earlier mappings which included this key or value
+# will be preferred.
+#
+# Mappings whose values specify DataFlavors with primary MIME types of
+# "text", and which support the charset parameter, should specify the exact
+# format in which the native platform expects the data. The "charset"
+# parameter specifies the char to byte encoding, the "eoln" parameter
+# specifies the end-of-line marker, and the "terminators" parameter specifies
+# the number of terminating NUL bytes. Note that "eoln" and "terminators"
+# are not standardized MIME type parameters. They are specific to this file
+# format ONLY. They will not appear in any of the DataFlavors returned by the
+# SystemFlavorMap at the Java level.
+#
+# If the "charset" parameter is omitted, or has zero length, the platform
+# default encoding is assumed. If the "eoln" parameter is omitted, or has
+# zero length, "\n" is assumed. If the "terminators" parameter is omitted,
+# or has a value less than zero, zero is assumed.
+#
+# Upon initialization, the data transfer subsystem will record the specified
+# details of the native text format, but the default SystemFlavorMap will
+# present a large set of synthesized DataFlavors which map, in both
+# directions, to the native. After receiving data from the application in one
+# of the synthetic DataFlavors, the data transfer subsystem will transform
+# the data stream into the format specified in this file before passing the
+# transformed stream to the native system.
+#
+# Mappings whose values specify DataFlavors with primary MIME types of
+# "text", but which do not support the charset parameter, will be treated as
+# opaque, 8-bit data. They will not undergo any transformation process, and
+# any "charset", "eoln", or "terminators" parameters specified in this file
+# will be ignored.
+#
+# See java.awt.datatransfer.DataFlavor.selectBestTextFlavor for a list of
+# text flavors which support the charset parameter.
+
+UTF8_STRING=text/plain;charset=UTF-8;eoln="\n";terminators=0
+
+# The COMPOUND_TEXT support for inter-client text transfer is disabled by
+# default. The reason is that many native applications prefer this format over
+# other native text formats, but are unable to decode the textual data in this
+# format properly. This results in java-to-native text transfer failures.
+# To enable the COMPOUND_TEXT support for this JRE installation uncomment
+# the line below.
+
+# COMPOUND_TEXT=text/plain;charset=x-compound-text;eoln="\n";terminators=0
+
+TEXT=text/plain;eoln="\n";terminators=0
+STRING=text/plain;charset=iso8859-1;eoln="\n";terminators=0
+FILE_NAME=application/x-java-file-list;class=java.util.List
+text/uri-list=application/x-java-file-list;class=java.util.List
+PNG=image/x-java-image;class=java.awt.Image
+JFIF=image/x-java-image;class=java.awt.Image
diff --git a/FCL/src/main/assets/java/lib/fontconfig.Linux.bfc b/FCL/src/main/assets/java/lib/fontconfig.Linux.bfc
new file mode 100644
index 000000000..25c5c4623
Binary files /dev/null and b/FCL/src/main/assets/java/lib/fontconfig.Linux.bfc differ
diff --git a/FCL/src/main/assets/java/lib/fontconfig.Linux.properties.src b/FCL/src/main/assets/java/lib/fontconfig.Linux.properties.src
new file mode 100644
index 000000000..c37c3cb1b
--- /dev/null
+++ b/FCL/src/main/assets/java/lib/fontconfig.Linux.properties.src
@@ -0,0 +1,144 @@
+#
+# Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
+#
+
+# Version
+
+version=1
+# Component Font Mappings
+
+allfonts.chinese-gbk=-tlc-songti-medium-r-normal--*-%d-*-*-c-*-gbk-0
+allfonts.chinese-gb2312=-tlc-songti-medium-r-normal--*-%d-*-*-c-*-gb2312.1980-0
+allfonts.chinese-iso10646=-tlc-songti-medium-r-normal--*-%d-*-*-c-*-iso10646-1
+allfonts.chinese-big5=-tlc-songti-medium-r-normal--*-%d-*-*-c-*-big5-0
+allfonts.lucida=-b&h-lucidasans-medium-r-normal-sans-*-%d-*-*-p-*-iso8859-1
+
+serif.plain.japanese-x0201=-ricoh-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0
+serif.plain.japanese-x0208=-ricoh-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0
+serif.plain.latin-1=-b&h-lucidabright-medium-r-normal--*-%d-*-*-p-*-iso8859-1
+
+serif.bold.japanese-x0201=-ricoh-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0
+serif.bold.japanese-x0208=-ricoh-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0
+serif.bold.latin-1=-b&h-lucidabright-demibold-r-normal--*-%d-*-*-p-*-iso8859-1
+
+serif.italic.japanese-x0201=-ricoh-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0
+serif.italic.japanese-x0208=-ricoh-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0
+serif.italic.latin-1=-b&h-lucidabright-medium-i-normal--*-%d-*-*-p-*-iso8859-1
+
+serif.bolditalic.japanese-x0201=-ricoh-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0
+serif.bolditalic.japanese-x0208=-ricoh-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0
+serif.bolditalic.latin-1=-b&h-lucidabright-demibold-i-normal--*-%d-*-*-p-*-iso8859-1
+
+sansserif.plain.japanese-x0201=-ricoh-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0
+sansserif.plain.japanese-x0208=-ricoh-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0
+sansserif.plain.latin-1=-b&h-lucidasans-medium-r-normal-sans-*-%d-*-*-p-*-iso8859-1
+
+sansserif.bold.japanese-x0201=-ricoh-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0
+sansserif.bold.japanese-x0208=-ricoh-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0
+sansserif.bold.latin-1=-b&h-lucidasans-bold-r-normal-sans-*-%d-*-*-p-*-iso8859-1
+
+sansserif.italic.japanese-x0201=-ricoh-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0
+sansserif.italic.japanese-x0208=-ricoh-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0
+sansserif.italic.latin-1=-b&h-lucidasans-medium-i-normal-sans-*-%d-*-*-p-*-iso8859-1
+
+sansserif.bolditalic.japanese-x0201=-ricoh-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0
+sansserif.bolditalic.japanese-x0208=-ricoh-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0
+sansserif.bolditalic.latin-1=-b&h-lucidasans-bold-i-normal-sans-*-%d-*-*-p-*-iso8859-1
+
+monospaced.plain.japanese-x0201=-ricoh-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0
+monospaced.plain.japanese-x0208=-ricoh-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0
+monospaced.plain.latin-1=-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1
+
+monospaced.bold.japanese-x0201=-ricoh-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0
+monospaced.bold.japanese-x0208=-ricoh-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0
+monospaced.bold.latin-1=-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1
+
+monospaced.italic.japanese-x0201=-ricoh-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0
+monospaced.italic.japanese-x0208=-ricoh-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0
+monospaced.italic.latin-1=-b&h-lucidatypewriter-medium-i-normal-sans-*-%d-*-*-m-*-iso8859-1
+
+monospaced.bolditalic.japanese-x0201=-ricoh-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0
+monospaced.bolditalic.japanese-x0208=-ricoh-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0
+monospaced.bolditalic.latin-1=-b&h-lucidatypewriter-bold-i-normal-sans-*-%d-*-*-m-*-iso8859-1
+
+dialog.plain.japanese-x0201=-ricoh-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0
+dialog.plain.japanese-x0208=-ricoh-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0
+dialog.plain.latin-1=-b&h-lucidasans-medium-r-normal-sans-*-%d-*-*-p-*-iso8859-1
+
+dialog.bold.japanese-x0201=-ricoh-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0
+dialog.bold.japanese-x0208=-ricoh-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0
+dialog.bold.latin-1=-b&h-lucidasans-bold-r-normal-sans-*-%d-*-*-p-*-iso8859-1
+
+dialog.italic.japanese-x0201=-ricoh-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0
+dialog.italic.japanese-x0208=-ricoh-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0
+dialog.italic.latin-1=-b&h-lucidasans-medium-i-normal-sans-*-%d-*-*-p-*-iso8859-1
+
+dialog.bolditalic.japanese-x0201=-ricoh-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0
+dialog.bolditalic.japanese-x0208=-ricoh-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0
+dialog.bolditalic.latin-1=-b&h-lucidasans-bold-i-normal-sans-*-%d-*-*-p-*-iso8859-1
+
+dialoginput.plain.japanese-x0201=-ricoh-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0
+dialoginput.plain.japanese-x0208=-ricoh-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0
+dialoginput.plain.latin-1=-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1
+
+dialoginput.bold.japanese-x0201=-ricoh-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0
+dialoginput.bold.japanese-x0208=-ricoh-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0
+dialoginput.bold.latin-1=-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1
+
+dialoginput.italic.japanese-x0201=-ricoh-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0
+dialoginput.italic.japanese-x0208=-ricoh-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0
+dialoginput.italic.latin-1=-b&h-lucidatypewriter-medium-i-normal-sans-*-%d-*-*-m-*-iso8859-1
+
+dialoginput.bolditalic.japanese-x0201=-ricoh-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0
+dialoginput.bolditalic.japanese-x0208=-ricoh-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0
+dialoginput.bolditalic.latin-1=-b&h-lucidatypewriter-bold-i-normal-sans-*-%d-*-*-m-*-iso8859-1
+
+
+# Search Sequences
+
+sequence.allfonts=latin-1
+sequence.allfonts.Big5=latin-1,chinese-big5
+sequence.allfonts.Big5-HKSCS=latin-1,chinese-big5
+sequence.allfonts.GB18030=latin-1,chinese-gbk,chinese-iso10646
+sequence.allfonts.GBK=latin-1,chinese-gbk
+sequence.allfonts.GB2312=latin-1,chinese-gb2312
+sequence.allfonts.x-euc-jp-linux=latin-1,japanese-x0208,japanese-x0201
+sequence.allfonts.UTF-8.ja.JP=latin-1,japanese-x0208,japanese-x0201,chinese-iso10646
+sequence.allfonts.UTF-8.zh=latin-1,chinese-iso10646,japanese-x0208,japanese-x0201
+sequence.fallback=lucida,chinese-big5,chinese-iso10646,japanese-x0208
+
+# Exclusion Ranges
+exclusion.japanese-x0201=0390-03d6,2200-22ef,2701-27be
+exclusion.japanese-x0208=0390-03d6,2200-22ef,2701-27be
+
+# Font File Names
+filename.-b&h-lucidasans-medium-r-normal-sans-*-%d-*-*-p-*-iso8859-1=$JRE_LIB_FONTS/LucidaSansRegular.ttf
+filename.-b&h-lucidabright-medium-r-normal--*-%d-*-*-p-*-iso8859-1=$JRE_LIB_FONTS/LucidaBrightRegular.ttf
+filename.-b&h-lucidabright-demibold-r-normal--*-%d-*-*-p-*-iso8859-1=$JRE_LIB_FONTS/LucidaBrightDemiBold.ttf
+filename.-b&h-lucidabright-medium-i-normal--*-%d-*-*-p-*-iso8859-1=$JRE_LIB_FONTS/LucidaBrightItalic.ttf
+filename.-b&h-lucidabright-demibold-i-normal--*-%d-*-*-p-*-iso8859-1=$JRE_LIB_FONTS/LucidaBrightDemiItalic.ttf
+filename.-b&h-lucidasans-bold-r-normal-sans-*-%d-*-*-p-*-iso8859-1=$JRE_LIB_FONTS/LucidaSansDemiBold.ttf
+filename.-b&h-lucidasans-medium-i-normal-sans-*-%d-*-*-p-*-iso8859-1=$JRE_LIB_FONTS/LucidaSansRegular.ttf
+filename.-b&h-lucidasans-bold-i-normal-sans-*-%d-*-*-p-*-iso8859-1=$JRE_LIB_FONTS/LucidaSansDemiBold.ttf
+filename.-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1=$JRE_LIB_FONTS/LucidaTypewriterRegular.ttf
+filename.-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1=$JRE_LIB_FONTS/LucidaTypewriterBold.ttf
+filename.-b&h-lucidatypewriter-medium-i-normal-sans-*-%d-*-*-m-*-iso8859-1=$JRE_LIB_FONTS/LucidaTypewriterRegular.ttf
+filename.-b&h-lucidatypewriter-bold-i-normal-sans-*-%d-*-*-m-*-iso8859-1=$JRE_LIB_FONTS/LucidaTypewriterBold.ttf
+
+filename.-tlc-songti-medium-r-normal--*-%d-*-*-c-*-big5-0=/usr/share/fonts/zh_TW/TrueType/bsmi00lp.ttf
+filename.-tlc-songti-medium-r-normal--*-%d-*-*-c-*-iso10646-1=/usr/share/fonts/zh_CN/TrueType/dwstzk.ttf
+filename.-tlc-songti-medium-r-normal--*-%d-*-*-c-*-gbk-0=/usr/share/fonts/zh_CN/TrueType/dwstzk.ttf
+filename.-tlc-songti-medium-r-normal--*-%d-*-*-c-*-gb2312.1980-0=/usr/share/fonts/zh_CN/TrueType/dwstzk.ttf
+filename.-ricoh-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0=/usr/share/fonts/ja/TrueType/tlgothic.ttc
+filename.-ricoh-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0=/usr/share/fonts/ja/TrueType/tlgothic.ttc
+filename.-ricoh-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0=/usr/share/fonts/ja/TrueType/tlmincho.ttc
+filename.-ricoh-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0=/usr/share/fonts/ja/TrueType/tlmincho.ttc
+
+
+# AWT X11 font paths
+awtfontpath.chinese-big5=/usr/share/fonts/zh_TW/TrueType
+awtfontpath.chinese-gb2312=/usr/share/fonts/zh_CN/TrueType
+awtfontpath.chinese-gbk=/usr/share/fonts/zh_CN/TrueType
+awtfontpath.chinese-iso10646=/usr/share/fonts/zh_CN/TrueType
+awtfontpath.japanese-x0201=/usr/share/fonts/ja/TrueType
+awtfontpath.japanese-x0208=/usr/share/fonts/ja/TrueType
diff --git a/FCL/src/main/assets/java/lib/fontconfig.bfc b/FCL/src/main/assets/java/lib/fontconfig.bfc
new file mode 100644
index 000000000..71cd4d321
Binary files /dev/null and b/FCL/src/main/assets/java/lib/fontconfig.bfc differ
diff --git a/FCL/src/main/assets/java/lib/fontconfig.properties b/FCL/src/main/assets/java/lib/fontconfig.properties
new file mode 100644
index 000000000..7d339ded6
--- /dev/null
+++ b/FCL/src/main/assets/java/lib/fontconfig.properties
@@ -0,0 +1,4 @@
+version=1
+allfonts.chinese-arphic1=-microsoft-microsoft yahei-medium-r-normal--0-0-0-0-p-0-iso10646-1
+sequence.allfonts=default
+sequence.fallback=chinese-arphic1
\ No newline at end of file
diff --git a/FCL/src/main/assets/java/lib/fontconfig.properties.src b/FCL/src/main/assets/java/lib/fontconfig.properties.src
new file mode 100644
index 000000000..1cb4b4711
--- /dev/null
+++ b/FCL/src/main/assets/java/lib/fontconfig.properties.src
@@ -0,0 +1,46 @@
+#
+# Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
+#
+
+# Version
+
+version=1
+
+# Component Font Mappings
+
+
+serif.plain.latin-1=-b&h-lucidabright-medium-r-normal--*-%d-*-*-p-*-iso8859-1
+serif.bold.latin-1=-b&h-lucidabright-demibold-r-normal--*-%d-*-*-p-*-iso8859-1
+serif.italic.latin-1=-b&h-lucidabright-medium-i-normal--*-%d-*-*-p-*-iso8859-1
+serif.bolditalic.latin-1=-b&h-lucidabright-demibold-i-normal--*-%d-*-*-p-*-iso8859-1
+
+sansserif.plain.latin-1=-b&h-lucidasans-medium-r-normal-sans-*-%d-*-*-p-*-iso8859-1
+sansserif.bold.latin-1=-b&h-lucidasans-bold-r-normal-sans-*-%d-*-*-p-*-iso8859-1
+sansserif.italic.latin-1=-b&h-lucidasans-medium-i-normal-sans-*-%d-*-*-p-*-iso8859-1
+sansserif.bolditalic.latin-1=-b&h-lucidasans-bold-i-normal-sans-*-%d-*-*-p-*-iso8859-1
+
+monospaced.plain.latin-1=-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1
+monospaced.bold.latin-1=-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1
+monospaced.italic.latin-1=-b&h-lucidatypewriter-medium-i-normal-sans-*-%d-*-*-m-*-iso8859-1
+monospaced.bolditalic.latin-1=-b&h-lucidatypewriter-bold-i-normal-sans-*-%d-*-*-m-*-iso8859-1
+
+dialog.plain.latin-1=-b&h-lucidasans-medium-r-normal-sans-*-%d-*-*-p-*-iso8859-1
+dialog.bold.latin-1=-b&h-lucidasans-bold-r-normal-sans-*-%d-*-*-p-*-iso8859-1
+dialog.italic.latin-1=-b&h-lucidasans-medium-i-normal-sans-*-%d-*-*-p-*-iso8859-1
+dialog.bolditalic.latin-1=-b&h-lucidasans-bold-i-normal-sans-*-%d-*-*-p-*-iso8859-1
+
+dialoginput.plain.latin-1=-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1
+dialoginput.bold.latin-1=-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1
+dialoginput.italic.latin-1=-b&h-lucidatypewriter-medium-i-normal-sans-*-%d-*-*-m-*-iso8859-1
+dialoginput.bolditalic.latin-1=-b&h-lucidatypewriter-bold-i-normal-sans-*-%d-*-*-m-*-iso8859-1
+
+# Search Sequences
+
+sequence.allfonts=latin-1
+
+# Exclusion Ranges
+
+# Font File Names
+
+
+
diff --git a/FCL/src/main/assets/java/lib/fonts/LucidaBrightDemiBold.ttf b/FCL/src/main/assets/java/lib/fonts/LucidaBrightDemiBold.ttf
new file mode 100644
index 000000000..8073c35e8
Binary files /dev/null and b/FCL/src/main/assets/java/lib/fonts/LucidaBrightDemiBold.ttf differ
diff --git a/FCL/src/main/assets/java/lib/fonts/LucidaBrightDemiItalic.ttf b/FCL/src/main/assets/java/lib/fonts/LucidaBrightDemiItalic.ttf
new file mode 100644
index 000000000..bae8c67bd
Binary files /dev/null and b/FCL/src/main/assets/java/lib/fonts/LucidaBrightDemiItalic.ttf differ
diff --git a/FCL/src/main/assets/java/lib/fonts/LucidaBrightItalic.ttf b/FCL/src/main/assets/java/lib/fonts/LucidaBrightItalic.ttf
new file mode 100644
index 000000000..c26afa3bc
Binary files /dev/null and b/FCL/src/main/assets/java/lib/fonts/LucidaBrightItalic.ttf differ
diff --git a/FCL/src/main/assets/java/lib/fonts/LucidaBrightRegular.ttf b/FCL/src/main/assets/java/lib/fonts/LucidaBrightRegular.ttf
new file mode 100644
index 000000000..79738f19d
Binary files /dev/null and b/FCL/src/main/assets/java/lib/fonts/LucidaBrightRegular.ttf differ
diff --git a/FCL/src/main/assets/java/lib/fonts/LucidaSansDemiBold.ttf b/FCL/src/main/assets/java/lib/fonts/LucidaSansDemiBold.ttf
new file mode 100644
index 000000000..a15910e1d
Binary files /dev/null and b/FCL/src/main/assets/java/lib/fonts/LucidaSansDemiBold.ttf differ
diff --git a/FCL/src/main/assets/java/lib/fonts/LucidaSansRegular.ttf b/FCL/src/main/assets/java/lib/fonts/LucidaSansRegular.ttf
new file mode 100644
index 000000000..4cabe6e76
Binary files /dev/null and b/FCL/src/main/assets/java/lib/fonts/LucidaSansRegular.ttf differ
diff --git a/FCL/src/main/assets/java/lib/fonts/LucidaTypewriterBold.ttf b/FCL/src/main/assets/java/lib/fonts/LucidaTypewriterBold.ttf
new file mode 100644
index 000000000..ac66d4f2b
Binary files /dev/null and b/FCL/src/main/assets/java/lib/fonts/LucidaTypewriterBold.ttf differ
diff --git a/FCL/src/main/assets/java/lib/fonts/LucidaTypewriterRegular.ttf b/FCL/src/main/assets/java/lib/fonts/LucidaTypewriterRegular.ttf
new file mode 100644
index 000000000..029518422
Binary files /dev/null and b/FCL/src/main/assets/java/lib/fonts/LucidaTypewriterRegular.ttf differ
diff --git a/FCL/src/main/assets/java/lib/fonts/fonts.dir b/FCL/src/main/assets/java/lib/fonts/fonts.dir
new file mode 100644
index 000000000..b4e5355cd
--- /dev/null
+++ b/FCL/src/main/assets/java/lib/fonts/fonts.dir
@@ -0,0 +1,50 @@
+49
+LucidaBrightRegular.ttf -b&h-lucidabright-medium-r-normal--0-0-0-0-p-0-iso8859-1
+LucidaBrightItalic.ttf -b&h-lucidabright-medium-i-normal--0-0-0-0-p-0-iso8859-1
+LucidaBrightDemiBold.ttf -b&h-lucidabright-demibold-r-normal--0-0-0-0-p-0-iso8859-1
+LucidaBrightDemiItalic.ttf -b&h-lucidabright-demibold-i-normal--0-0-0-0-p-0-iso8859-1
+LucidaSansRegular.ttf -b&h-lucidasans-medium-r-normal-sans-0-0-0-0-p-0-iso8859-1
+LucidaSansDemiBold.ttf -b&h-lucidasans-bold-r-normal-sans-0-0-0-0-p-0-iso8859-1
+LucidaTypewriterRegular.ttf -b&h-lucidatypewriter-medium-r-normal-sans-0-0-0-0-m-0-iso8859-1
+LucidaTypewriterBold.ttf -b&h-lucidatypewriter-bold-r-normal-sans-0-0-0-0-m-0-iso8859-1
+LucidaBrightRegular.ttf -b&h-lucidabright-medium-r-normal--0-0-0-0-p-0-iso8859-2
+LucidaBrightItalic.ttf -b&h-lucidabright-medium-i-normal--0-0-0-0-p-0-iso8859-2
+LucidaBrightDemiBold.ttf -b&h-lucidabright-demibold-r-normal--0-0-0-0-p-0-iso8859-2
+LucidaBrightDemiItalic.ttf -b&h-lucidabright-demibold-i-normal--0-0-0-0-p-0-iso8859-2
+LucidaSansRegular.ttf -b&h-lucidasans-medium-r-normal-sans-0-0-0-0-p-0-iso8859-2
+LucidaSansDemiBold.ttf -b&h-lucidasans-bold-r-normal-sans-0-0-0-0-p-0-iso8859-2
+LucidaTypewriterRegular.ttf -b&h-lucidatypewriter-medium-r-normal-sans-0-0-0-0-m-0-iso8859-2
+LucidaTypewriterBold.ttf -b&h-lucidatypewriter-bold-r-normal-sans-0-0-0-0-m-0-iso8859-2
+LucidaBrightRegular.ttf -b&h-lucidabright-medium-r-normal--0-0-0-0-p-0-iso8859-4
+LucidaBrightItalic.ttf -b&h-lucidabright-medium-i-normal--0-0-0-0-p-0-iso8859-4
+LucidaBrightDemiBold.ttf -b&h-lucidabright-demibold-r-normal--0-0-0-0-p-0-iso8859-4
+LucidaBrightDemiItalic.ttf -b&h-lucidabright-demibold-i-normal--0-0-0-0-p-0-iso8859-4
+LucidaSansRegular.ttf -b&h-lucidasans-medium-r-normal-sans-0-0-0-0-p-0-iso8859-4
+LucidaSansDemiBold.ttf -b&h-lucidasans-bold-r-normal-sans-0-0-0-0-p-0-iso8859-4
+LucidaTypewriterRegular.ttf -b&h-lucidatypewriter-medium-r-normal-sans-0-0-0-0-m-0-iso8859-4
+LucidaTypewriterBold.ttf -b&h-lucidatypewriter-bold-r-normal-sans-0-0-0-0-m-0-iso8859-4
+LucidaBrightRegular.ttf -b&h-lucidabright-medium-r-normal--0-0-0-0-p-0-iso8859-5
+LucidaBrightItalic.ttf -b&h-lucidabright-medium-i-normal--0-0-0-0-p-0-iso8859-5
+LucidaBrightDemiBold.ttf -b&h-lucidabright-demibold-r-normal--0-0-0-0-p-0-iso8859-5
+LucidaBrightDemiItalic.ttf -b&h-lucidabright-demibold-i-normal--0-0-0-0-p-0-iso8859-5
+LucidaSansRegular.ttf -b&h-lucidasans-medium-r-normal-sans-0-0-0-0-p-0-iso8859-5
+LucidaSansDemiBold.ttf -b&h-lucidasans-bold-r-normal-sans-0-0-0-0-p-0-iso8859-5
+LucidaTypewriterRegular.ttf -b&h-lucidatypewriter-medium-r-normal-sans-0-0-0-0-m-0-iso8859-5
+LucidaTypewriterBold.ttf -b&h-lucidatypewriter-bold-r-normal-sans-0-0-0-0-m-0-iso8859-5
+LucidaBrightRegular.ttf -b&h-lucidabright-medium-r-normal--0-0-0-0-p-0-iso8859-7
+LucidaBrightItalic.ttf -b&h-lucidabright-medium-i-normal--0-0-0-0-p-0-iso8859-7
+LucidaBrightDemiBold.ttf -b&h-lucidabright-demibold-r-normal--0-0-0-0-p-0-iso8859-7
+LucidaBrightDemiItalic.ttf -b&h-lucidabright-demibold-i-normal--0-0-0-0-p-0-iso8859-7
+LucidaSansRegular.ttf -b&h-lucidasans-medium-r-normal-sans-0-0-0-0-p-0-iso8859-7
+LucidaSansDemiBold.ttf -b&h-lucidasans-bold-r-normal-sans-0-0-0-0-p-0-iso8859-7
+LucidaTypewriterRegular.ttf -b&h-lucidatypewriter-medium-r-normal-sans-0-0-0-0-m-0-iso8859-7
+LucidaTypewriterBold.ttf -b&h-lucidatypewriter-bold-r-normal-sans-0-0-0-0-m-0-iso8859-7
+LucidaBrightRegular.ttf -b&h-lucidabright-medium-r-normal--0-0-0-0-p-0-iso8859-9
+LucidaBrightItalic.ttf -b&h-lucidabright-medium-i-normal--0-0-0-0-p-0-iso8859-9
+LucidaBrightDemiBold.ttf -b&h-lucidabright-demibold-r-normal--0-0-0-0-p-0-iso8859-9
+LucidaBrightDemiItalic.ttf -b&h-lucidabright-demibold-i-normal--0-0-0-0-p-0-iso8859-9
+LucidaSansRegular.ttf -b&h-lucidasans-medium-r-normal-sans-0-0-0-0-p-0-iso8859-9
+LucidaSansDemiBold.ttf -b&h-lucidasans-bold-r-normal-sans-0-0-0-0-p-0-iso8859-9
+LucidaTypewriterRegular.ttf -b&h-lucidatypewriter-medium-r-normal-sans-0-0-0-0-m-0-iso8859-9
+LucidaTypewriterBold.ttf -b&h-lucidatypewriter-bold-r-normal-sans-0-0-0-0-m-0-iso8859-9
+微软雅黑.ttf -microsoft-microsoft yahei-medium-r-normal--0-0-0-0-p-0-iso10646-1
diff --git "a/FCL/src/main/assets/java/lib/fonts/\345\276\256\350\275\257\351\233\205\351\273\221.ttf" "b/FCL/src/main/assets/java/lib/fonts/\345\276\256\350\275\257\351\233\205\351\273\221.ttf"
new file mode 100644
index 000000000..aa23ae1f1
Binary files /dev/null and "b/FCL/src/main/assets/java/lib/fonts/\345\276\256\350\275\257\351\233\205\351\273\221.ttf" differ
diff --git a/FCL/src/main/assets/java/lib/hijrah-config-umalqura.properties b/FCL/src/main/assets/java/lib/hijrah-config-umalqura.properties
new file mode 100644
index 000000000..1786c14de
--- /dev/null
+++ b/FCL/src/main/assets/java/lib/hijrah-config-umalqura.properties
@@ -0,0 +1,369 @@
+# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code 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
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+# This properties file defines a Hijrah calendar variant.
+#
+# Fields:
+#
+# ::= 'version' '='
+# ::= 'id' '='
+# ::= 'type' '='
+# ::= 'iso-start' '='
+# ::= '='
+#
+# version ... (Required)
+#
+# id ... (Required)
+# Identifies the Java Chronology
+#
+# type ... (Required)
+# Identifies the type of calendar in the standard calendar ID scheme
+# iso-start ... (Required)
+# Specifies the corresponding ISO date to the first Hijrah day
+# in the defined range of dates
+#
+# year ... (Required)
+# Number of days for each month of a Hijrah year
+# * Each line defines a year. The years must be in chronological
+# order and no gap is allowed.
+# * Each line is in the form indicated above. is a Hijrah year and
+# nn is the number of days for a month listed in the order of the months.
+# * Each year must have 12 months.
+# * Each month should be 29 or 30 days long.
+# * There must be one or more space characters between the months.
+#
+
+# Version of this definition
+version=1.8.0_1
+
+# Java chronology ID
+id=Hijrah-umalqura
+
+# Standard calendar type specification
+type=islamic-umalqura
+
+# defines the corresponding ISO date to the earliest Hijrah date
+iso-start=1882-11-12
+
+# 1 2 3 4 5 6 7 8 9 10 11 12
+1300=30 29 30 29 30 29 30 29 30 29 30 29
+1301=30 30 29 30 29 30 29 30 29 30 29 29
+1302=30 30 30 29 30 30 29 29 30 29 29 30
+1303=29 30 30 29 30 30 29 30 29 30 29 29
+1304=29 30 30 29 30 30 30 29 30 29 30 29
+1305=29 29 30 30 29 30 30 29 30 30 29 29
+1306=30 29 30 29 30 29 30 29 30 30 29 30
+1307=29 30 29 30 29 30 29 30 29 30 29 30
+1308=29 30 30 29 30 29 30 29 30 29 29 30
+1309=29 30 30 30 30 29 29 30 29 29 30 29
+1310=30 29 30 30 30 29 30 29 30 29 29 30
+1311=29 30 29 30 30 30 29 30 29 30 29 29
+1312=30 29 30 29 30 30 29 30 30 29 30 29
+1313=29 30 29 30 29 30 29 30 30 30 29 29
+1314=30 30 29 30 29 29 30 29 30 30 29 30
+1315=29 30 30 29 30 29 29 30 29 30 29 30
+1316=29 30 30 30 29 30 29 29 30 29 30 29
+1317=30 29 30 30 29 30 29 30 29 30 29 29
+1318=30 29 30 30 29 30 30 29 30 29 30 29
+1319=29 30 29 30 30 29 30 29 30 30 29 30
+1320=29 30 29 29 30 29 30 29 30 30 30 29
+1321=30 29 30 29 29 30 29 29 30 30 30 30
+1322=29 30 29 30 29 29 29 30 29 30 30 30
+1323=29 30 30 29 30 29 29 29 30 29 30 30
+1324=29 30 30 29 30 29 30 29 29 30 29 30
+1325=30 29 30 29 30 30 29 30 29 30 29 30
+1326=29 29 30 29 30 30 29 30 29 30 30 29
+1327=30 29 29 30 29 30 29 30 30 29 30 30
+1328=29 30 29 29 30 29 29 30 30 30 29 30
+1329=30 29 30 29 29 30 29 29 30 30 29 30
+1330=30 30 29 30 29 29 30 29 29 30 30 29
+1331=30 30 29 30 30 29 29 30 29 30 29 30
+1332=29 30 29 30 30 29 30 29 30 30 29 29
+1333=30 29 29 30 30 29 30 30 29 30 30 29
+1334=29 29 30 29 30 29 30 30 30 29 30 29
+1335=30 29 30 29 29 30 29 30 30 29 30 30
+1336=29 30 29 30 29 29 30 29 30 29 30 30
+1337=30 29 30 29 30 29 29 30 29 30 29 30
+1338=29 30 30 29 30 30 29 29 30 29 30 29
+1339=30 29 30 29 30 30 30 29 30 29 29 30
+1340=29 29 30 29 30 30 30 30 29 30 29 29
+1341=30 29 29 30 29 30 30 30 29 30 30 29
+1342=29 29 30 29 30 29 30 30 29 30 30 29
+1343=30 29 29 30 29 30 29 30 29 30 30 29
+1344=30 29 30 29 30 30 29 29 30 29 30 29
+1345=30 29 30 30 30 29 30 29 29 30 29 29
+1346=30 29 30 30 30 30 29 30 29 29 30 29
+1347=29 30 29 30 30 30 29 30 30 29 29 30
+1348=29 29 30 29 30 30 29 30 30 30 29 29
+1349=30 29 29 30 29 30 30 29 30 30 29 30
+1350=29 30 29 30 29 30 29 29 30 30 29 30
+1351=30 29 30 29 30 29 30 29 29 30 29 30
+1352=30 29 30 30 29 30 29 30 29 29 30 29
+1353=30 29 30 30 30 29 30 29 29 30 29 30
+1354=29 30 29 30 30 29 30 30 29 30 29 29
+1355=30 29 29 30 30 29 30 30 29 30 30 29
+1356=29 30 29 30 29 30 29 30 29 30 30 30
+1357=29 29 30 29 30 29 29 30 29 30 30 30
+1358=29 30 29 30 29 30 29 29 30 29 30 30
+1359=29 30 30 29 30 29 30 29 29 29 30 30
+1360=29 30 30 30 29 30 29 30 29 29 30 29
+1361=30 29 30 30 29 30 30 29 29 30 29 30
+1362=29 30 29 30 29 30 30 29 30 29 30 29
+1363=30 29 30 29 30 29 30 29 30 29 30 30
+1364=29 30 29 30 29 29 30 29 30 29 30 30
+1365=30 30 29 29 30 29 29 30 29 30 29 30
+1366=30 30 29 30 29 30 29 29 30 29 30 29
+1367=30 30 29 30 30 29 30 29 29 30 29 30
+1368=29 30 29 30 30 30 29 29 30 29 30 29
+1369=30 29 30 29 30 30 29 30 29 30 30 29
+1370=30 29 29 30 29 30 29 30 29 30 30 30
+1371=29 30 29 29 30 29 30 29 30 29 30 30
+1372=30 29 29 30 29 30 29 29 30 29 30 30
+1373=30 29 30 29 30 29 30 29 29 30 29 30
+1374=30 29 30 30 29 30 29 30 29 29 30 29
+1375=30 29 30 30 29 30 30 29 30 29 30 29
+1376=29 30 29 30 29 30 30 30 29 30 29 30
+1377=29 29 30 29 29 30 30 30 29 30 30 29
+1378=30 29 29 29 30 29 30 30 29 30 30 30
+1379=29 30 29 29 29 30 29 30 30 29 30 30
+1380=29 30 29 30 29 30 29 30 29 30 29 30
+1381=29 30 29 30 30 29 30 29 30 29 29 30
+1382=29 30 29 30 30 29 30 30 29 30 29 29
+1383=30 29 29 30 30 30 29 30 30 29 30 29
+1384=29 30 29 29 30 30 29 30 30 30 29 30
+1385=29 29 30 29 29 30 30 29 30 30 30 29
+1386=30 29 29 30 29 29 30 30 29 30 30 29
+1387=30 29 30 29 30 29 30 29 30 29 30 29
+1388=30 30 29 30 29 30 29 30 29 30 29 29
+1389=30 30 29 30 30 29 30 30 29 29 30 29
+1390=29 30 29 30 30 30 29 30 29 30 29 30
+1391=29 29 30 29 30 30 29 30 30 29 30 29
+1392=30 29 29 30 29 30 29 30 30 29 30 30
+1393=29 30 29 29 30 29 30 29 30 29 30 30
+1394=30 29 30 29 29 30 29 30 29 30 29 30
+1395=30 29 30 30 29 30 29 29 30 29 29 30
+1396=30 29 30 30 29 30 30 29 29 30 29 29
+1397=30 29 30 30 29 30 30 30 29 29 29 30
+1398=29 30 29 30 30 29 30 30 29 30 29 29
+1399=30 29 30 29 30 29 30 30 29 30 29 30
+1400=30 29 30 29 29 30 29 30 29 30 29 30
+1401=30 30 29 30 29 29 30 29 29 30 29 30
+1402=30 30 30 29 30 29 29 30 29 29 30 29
+1403=30 30 30 29 30 30 29 29 30 29 29 30
+1404=29 30 30 29 30 30 29 30 29 30 29 29
+1405=30 29 30 29 30 30 30 29 30 29 29 30
+1406=30 29 29 30 29 30 30 29 30 29 30 30
+1407=29 30 29 29 30 29 30 29 30 29 30 30
+1408=30 29 30 29 30 29 29 30 29 29 30 30
+1409=30 30 29 30 29 30 29 29 30 29 29 30
+1410=30 30 29 30 30 29 30 29 29 30 29 29
+1411=30 30 29 30 30 29 30 30 29 29 30 29
+1412=30 29 30 29 30 29 30 30 30 29 29 30
+1413=29 30 29 29 30 29 30 30 30 29 30 29
+1414=30 29 30 29 29 30 29 30 30 29 30 30
+1415=29 30 29 30 29 29 30 29 30 29 30 30
+1416=30 29 30 29 30 29 29 30 29 30 29 30
+1417=30 29 30 30 29 29 30 29 30 29 30 29
+1418=30 29 30 30 29 30 29 30 29 30 29 30
+1419=29 30 29 30 29 30 29 30 30 30 29 29
+1420=29 30 29 29 30 29 30 30 30 30 29 30
+1421=29 29 30 29 29 29 30 30 30 30 29 30
+1422=30 29 29 30 29 29 29 30 30 30 29 30
+1423=30 29 30 29 30 29 29 30 29 30 29 30
+1424=30 29 30 30 29 30 29 29 30 29 30 29
+1425=30 29 30 30 29 30 29 30 30 29 30 29
+1426=29 30 29 30 29 30 30 29 30 30 29 30
+1427=29 29 30 29 30 29 30 30 29 30 30 29
+1428=30 29 29 30 29 29 30 30 30 29 30 30
+1429=29 30 29 29 30 29 29 30 30 29 30 30
+1430=29 30 30 29 29 30 29 30 29 30 29 30
+1431=29 30 30 29 30 29 30 29 30 29 29 30
+1432=29 30 30 30 29 30 29 30 29 30 29 29
+1433=30 29 30 30 29 30 30 29 30 29 30 29
+1434=29 30 29 30 29 30 30 29 30 30 29 29
+1435=30 29 30 29 30 29 30 29 30 30 29 30
+1436=29 30 29 30 29 30 29 30 29 30 29 30
+1437=30 29 30 30 29 29 30 29 30 29 29 30
+1438=30 29 30 30 30 29 29 30 29 29 30 29
+1439=30 29 30 30 30 29 30 29 30 29 29 30
+1440=29 30 29 30 30 30 29 30 29 30 29 29
+1441=30 29 30 29 30 30 29 30 30 29 30 29
+1442=29 30 29 30 29 30 29 30 30 29 30 29
+1443=30 29 30 29 30 29 30 29 30 29 30 30
+1444=29 30 29 30 30 29 29 30 29 30 29 30
+1445=29 30 30 30 29 30 29 29 30 29 29 30
+1446=29 30 30 30 29 30 30 29 29 30 29 29
+1447=30 29 30 30 30 29 30 29 30 29 30 29
+1448=29 30 29 30 30 29 30 30 29 30 29 30
+1449=29 29 30 29 30 29 30 30 29 30 30 29
+1450=30 29 30 29 29 30 29 30 29 30 30 29
+1451=30 30 30 29 29 30 29 29 30 30 29 30
+1452=30 29 30 30 29 29 30 29 29 30 29 30
+1453=30 29 30 30 29 30 29 30 29 29 30 29
+1454=30 29 30 30 29 30 30 29 30 29 30 29
+1455=29 30 29 30 30 29 30 29 30 30 29 30
+1456=29 29 30 29 30 29 30 29 30 30 30 29
+1457=30 29 29 30 29 29 30 29 30 30 30 30
+1458=29 30 29 29 30 29 29 30 29 30 30 30
+1459=29 30 30 29 29 30 29 29 30 29 30 30
+1460=29 30 30 29 30 29 30 29 29 30 29 30
+1461=29 30 30 29 30 29 30 29 30 30 29 29
+1462=30 29 30 29 30 30 29 30 29 30 30 29
+1463=29 30 29 30 29 30 29 30 30 30 29 30
+1464=29 30 29 29 30 29 29 30 30 30 29 30
+1465=30 29 30 29 29 30 29 29 30 30 29 30
+1466=30 30 29 30 29 29 29 30 29 30 30 29
+1467=30 30 29 30 30 29 29 30 29 30 29 30
+1468=29 30 29 30 30 29 30 29 30 29 30 29
+1469=29 30 29 30 30 29 30 30 29 30 29 30
+1470=29 29 30 29 30 30 29 30 30 29 30 29
+1471=30 29 29 30 29 30 29 30 30 29 30 30
+1472=29 30 29 29 30 29 30 29 30 30 29 30
+1473=29 30 29 30 30 29 29 30 29 30 29 30
+1474=29 30 30 29 30 30 29 29 30 29 30 29
+1475=29 30 30 29 30 30 30 29 29 30 29 29
+1476=30 29 30 29 30 30 30 29 30 29 30 29
+1477=29 30 29 29 30 30 30 30 29 30 29 30
+1478=29 29 30 29 30 29 30 30 29 30 30 29
+1479=30 29 29 30 29 30 29 30 29 30 30 29
+1480=30 29 30 29 30 29 30 29 30 29 30 29
+1481=30 29 30 30 29 30 29 30 29 30 29 29
+1482=30 29 30 30 30 30 29 30 29 29 30 29
+1483=29 30 29 30 30 30 29 30 30 29 29 30
+1484=29 29 30 29 30 30 30 29 30 29 30 29
+1485=30 29 29 30 29 30 30 29 30 30 29 30
+1486=29 30 29 29 30 29 30 29 30 30 29 30
+1487=30 29 30 29 30 29 29 30 29 30 29 30
+1488=30 29 30 30 29 30 29 29 30 29 30 29
+1489=30 29 30 30 30 29 30 29 29 30 29 30
+1490=29 30 29 30 30 29 30 30 29 29 30 29
+1491=30 29 29 30 30 29 30 30 29 30 29 30
+1492=29 30 29 29 30 30 29 30 29 30 30 29
+1493=30 29 30 29 30 29 29 30 29 30 30 30
+1494=29 30 29 30 29 30 29 29 29 30 30 30
+1495=29 30 30 29 30 29 29 30 29 29 30 30
+1496=29 30 30 30 29 30 29 29 30 29 29 30
+1497=30 29 30 30 29 30 29 30 29 30 29 30
+1498=29 30 29 30 29 30 30 29 30 29 30 29
+1499=30 29 30 29 29 30 30 29 30 29 30 30
+1500=29 30 29 30 29 29 30 29 30 29 30 30
+1501=30 29 30 29 30 29 29 29 30 29 30 30
+1502=30 30 29 30 29 30 29 29 29 30 30 29
+1503=30 30 29 30 30 29 30 29 29 29 30 30
+1504=29 30 29 30 30 30 29 29 30 29 30 29
+1505=30 29 30 29 30 30 29 30 29 30 30 29
+1506=29 30 29 29 30 30 29 30 30 29 30 30
+1507=29 29 30 29 29 30 30 29 30 29 30 30
+1508=30 29 29 30 29 30 29 29 30 29 30 30
+1509=30 29 30 29 30 29 30 29 29 30 29 30
+1510=30 29 30 30 29 30 29 30 29 29 30 29
+1511=30 29 30 30 29 30 30 29 30 29 29 30
+1512=29 30 29 30 29 30 30 30 29 30 29 30
+1513=29 29 29 30 29 30 30 30 29 30 30 29
+1514=30 29 29 29 30 29 30 30 29 30 30 30
+1515=29 29 30 29 29 30 29 30 30 29 30 30
+1516=29 30 29 30 29 29 30 29 30 29 30 30
+1517=29 30 29 30 29 30 30 29 29 30 29 30
+1518=29 30 29 30 30 29 30 30 29 30 29 29
+1519=30 29 29 30 30 30 29 30 30 29 30 29
+1520=29 30 29 29 30 30 30 29 30 30 29 30
+1521=29 29 29 30 29 30 30 29 30 30 29 30
+1522=30 29 29 29 30 29 30 30 29 30 30 29
+1523=30 29 30 29 30 29 30 29 29 30 30 29
+1524=30 30 29 30 29 30 29 30 29 29 30 29
+1525=30 30 29 30 30 29 30 29 30 29 29 30
+1526=29 30 29 30 30 30 29 30 29 30 29 29
+1527=30 29 30 29 30 30 29 30 30 29 30 29
+1528=30 29 29 30 29 30 29 30 30 29 30 30
+1529=29 30 29 29 30 29 30 29 30 29 30 30
+1530=29 30 30 29 29 30 29 30 29 29 30 30
+1531=29 30 30 30 29 29 30 29 30 29 29 30
+1532=29 30 30 30 29 30 30 29 29 29 30 29
+1533=30 29 30 30 30 29 30 29 30 29 29 30
+1534=29 30 29 30 30 29 30 30 29 29 30 29
+1535=30 29 30 29 30 29 30 30 29 30 29 30
+1536=29 30 29 30 29 30 29 30 29 30 29 30
+1537=30 29 30 30 29 29 30 29 29 30 29 30
+1538=30 30 29 30 30 29 29 30 29 29 30 29
+1539=30 30 30 29 30 30 29 29 30 29 29 30
+1540=29 30 30 29 30 30 29 30 29 29 30 29
+1541=30 29 30 29 30 30 30 29 30 29 29 30
+1542=29 30 29 30 29 30 30 29 30 29 30 30
+1543=29 30 29 29 30 29 30 29 30 29 30 30
+1544=30 29 30 29 29 30 29 30 29 30 29 30
+1545=30 30 29 30 29 29 30 29 30 29 29 30
+1546=30 30 29 30 29 30 29 30 29 30 29 29
+1547=30 30 29 30 30 29 30 29 30 29 30 29
+1548=30 29 29 30 30 29 30 30 29 30 29 30
+1549=29 30 29 29 30 29 30 30 30 29 30 29
+1550=30 29 30 29 29 29 30 30 30 29 30 30
+1551=29 30 29 29 30 29 29 30 30 29 30 30
+1552=30 29 30 29 29 30 29 29 30 30 29 30
+1553=30 29 30 29 30 29 30 29 30 29 30 29
+1554=30 29 30 29 30 30 29 30 29 30 29 30
+1555=29 29 30 29 30 30 29 30 30 29 30 29
+1556=30 29 29 30 29 30 29 30 30 30 29 30
+1557=29 30 29 29 29 30 29 30 30 30 30 29
+1558=30 29 30 29 29 29 30 29 30 30 30 29
+1559=30 30 29 29 30 29 29 30 30 29 30 29
+1560=30 30 29 30 29 30 29 30 29 30 29 30
+1561=29 30 30 29 30 29 30 30 29 29 30 29
+1562=29 30 30 29 30 29 30 30 30 29 29 30
+1563=29 30 29 29 30 29 30 30 30 29 30 29
+1564=30 29 30 29 29 30 29 30 30 30 29 30
+1565=29 30 29 30 29 29 30 29 30 30 29 30
+1566=30 29 30 29 30 29 29 30 29 30 29 30
+1567=30 29 30 30 29 30 29 30 29 29 30 29
+1568=30 29 30 30 30 29 30 29 30 29 29 29
+1569=30 29 30 30 30 29 30 30 29 30 29 29
+1570=29 30 29 30 30 29 30 30 30 29 29 30
+1571=29 29 30 29 30 30 29 30 30 29 30 29
+1572=30 29 29 30 29 30 29 30 30 29 30 29
+1573=30 29 30 30 29 30 29 29 30 29 30 29
+1574=30 30 29 30 30 29 30 29 29 30 29 29
+1575=30 30 30 29 30 30 29 30 29 29 29 30
+1576=29 30 30 29 30 30 30 29 30 29 29 29
+1577=30 29 30 30 29 30 30 29 30 29 30 29
+1578=29 30 29 30 29 30 30 29 30 30 29 30
+1579=29 30 29 30 29 29 30 30 29 30 29 30
+1580=29 30 30 29 30 29 29 30 29 30 29 30
+1581=30 30 29 30 29 30 29 29 30 29 30 29
+1582=30 30 29 30 30 29 30 29 30 29 29 29
+1583=30 30 29 30 30 30 29 30 29 30 29 29
+1584=29 30 30 29 30 30 29 30 30 29 30 29
+1585=29 30 29 30 29 30 29 30 30 29 30 30
+1586=29 29 30 29 30 29 29 30 30 30 29 30
+1587=29 30 30 29 29 29 30 29 30 29 30 30
+1588=30 29 30 30 29 29 29 30 29 30 29 30
+1589=30 29 30 30 29 30 29 29 30 29 30 29
+1590=30 29 30 30 30 29 29 30 29 30 29 30
+1591=29 30 29 30 30 29 30 29 30 29 30 29
+1592=30 29 30 29 30 29 30 29 30 30 30 29
+1593=30 29 29 30 29 29 30 29 30 30 30 29
+1594=30 30 29 29 30 29 29 29 30 30 30 30
+1595=29 30 29 30 29 29 30 29 29 30 30 30
+1596=29 30 30 29 30 29 29 30 29 30 29 30
+1597=29 30 30 29 30 29 30 29 30 29 30 29
+1598=30 29 30 29 30 30 29 30 29 30 30 29
+1599=29 30 29 30 29 30 29 30 30 30 29 30
+1600=29 29 30 29 30 29 29 30 30 30 29 30
diff --git a/FCL/src/main/assets/java/lib/images/cursors/cursors.properties b/FCL/src/main/assets/java/lib/images/cursors/cursors.properties
new file mode 100644
index 000000000..30e9f903f
--- /dev/null
+++ b/FCL/src/main/assets/java/lib/images/cursors/cursors.properties
@@ -0,0 +1,40 @@
+#
+#
+# Cursors Properties file
+#
+# Names GIF89 sources for Custom Cursors and their associated HotSpots
+#
+# Note: the syntax of the property name is significant and is parsed
+# by java.awt.Cursor
+#
+# The syntax is: Cursor...File=
+# Cursor...HotSpot=,
+# Cursor...Name=
+#
+Cursor.CopyDrop.32x32.File=motif_CopyDrop32x32.gif
+Cursor.CopyDrop.32x32.HotSpot=0,0
+Cursor.CopyDrop.32x32.Name=CopyDrop32x32
+#
+Cursor.MoveDrop.32x32.File=motif_MoveDrop32x32.gif
+Cursor.MoveDrop.32x32.HotSpot=0,0
+Cursor.MoveDrop.32x32.Name=MoveDrop32x32
+#
+Cursor.LinkDrop.32x32.File=motif_LinkDrop32x32.gif
+Cursor.LinkDrop.32x32.HotSpot=0,0
+Cursor.LinkDrop.32x32.Name=LinkDrop32x32
+#
+Cursor.CopyNoDrop.32x32.File=motif_CopyNoDrop32x32.gif
+Cursor.CopyNoDrop.32x32.HotSpot=6,2
+Cursor.CopyNoDrop.32x32.Name=CopyNoDrop32x32
+#
+Cursor.MoveNoDrop.32x32.File=motif_MoveNoDrop32x32.gif
+Cursor.MoveNoDrop.32x32.HotSpot=6,2
+Cursor.MoveNoDrop.32x32.Name=MoveNoDrop32x32
+#
+Cursor.LinkNoDrop.32x32.File=motif_LinkNoDrop32x32.gif
+Cursor.LinkNoDrop.32x32.HotSpot=6,2
+Cursor.LinkNoDrop.32x32.Name=LinkNoDrop32x32
+#
+Cursor.Invalid.32x32.File=invalid32x32.gif
+Cursor.Invalid.32x32.HotSpot=6,2
+Cursor.Invalid.32x32.Name=Invalid32x32
diff --git a/FCL/src/main/assets/java/lib/images/cursors/invalid32x32.gif b/FCL/src/main/assets/java/lib/images/cursors/invalid32x32.gif
new file mode 100644
index 000000000..64c265d3e
Binary files /dev/null and b/FCL/src/main/assets/java/lib/images/cursors/invalid32x32.gif differ
diff --git a/FCL/src/main/assets/java/lib/images/cursors/motif_CopyDrop32x32.gif b/FCL/src/main/assets/java/lib/images/cursors/motif_CopyDrop32x32.gif
new file mode 100644
index 000000000..a9ec2471e
Binary files /dev/null and b/FCL/src/main/assets/java/lib/images/cursors/motif_CopyDrop32x32.gif differ
diff --git a/FCL/src/main/assets/java/lib/images/cursors/motif_CopyNoDrop32x32.gif b/FCL/src/main/assets/java/lib/images/cursors/motif_CopyNoDrop32x32.gif
new file mode 100644
index 000000000..64c265d3e
Binary files /dev/null and b/FCL/src/main/assets/java/lib/images/cursors/motif_CopyNoDrop32x32.gif differ
diff --git a/FCL/src/main/assets/java/lib/images/cursors/motif_LinkDrop32x32.gif b/FCL/src/main/assets/java/lib/images/cursors/motif_LinkDrop32x32.gif
new file mode 100644
index 000000000..10c84c130
Binary files /dev/null and b/FCL/src/main/assets/java/lib/images/cursors/motif_LinkDrop32x32.gif differ
diff --git a/FCL/src/main/assets/java/lib/images/cursors/motif_LinkNoDrop32x32.gif b/FCL/src/main/assets/java/lib/images/cursors/motif_LinkNoDrop32x32.gif
new file mode 100644
index 000000000..64c265d3e
Binary files /dev/null and b/FCL/src/main/assets/java/lib/images/cursors/motif_LinkNoDrop32x32.gif differ
diff --git a/FCL/src/main/assets/java/lib/images/cursors/motif_MoveDrop32x32.gif b/FCL/src/main/assets/java/lib/images/cursors/motif_MoveDrop32x32.gif
new file mode 100644
index 000000000..8304aa0d5
Binary files /dev/null and b/FCL/src/main/assets/java/lib/images/cursors/motif_MoveDrop32x32.gif differ
diff --git a/FCL/src/main/assets/java/lib/images/cursors/motif_MoveNoDrop32x32.gif b/FCL/src/main/assets/java/lib/images/cursors/motif_MoveNoDrop32x32.gif
new file mode 100644
index 000000000..64c265d3e
Binary files /dev/null and b/FCL/src/main/assets/java/lib/images/cursors/motif_MoveNoDrop32x32.gif differ
diff --git a/FCL/src/main/assets/java/lib/jce.jar b/FCL/src/main/assets/java/lib/jce.jar
new file mode 100644
index 000000000..678653c1d
Binary files /dev/null and b/FCL/src/main/assets/java/lib/jce.jar differ
diff --git a/FCL/src/main/assets/java/lib/jexec b/FCL/src/main/assets/java/lib/jexec
new file mode 100644
index 000000000..c5efa2990
Binary files /dev/null and b/FCL/src/main/assets/java/lib/jexec differ
diff --git a/FCL/src/main/assets/java/lib/jfr.jar b/FCL/src/main/assets/java/lib/jfr.jar
new file mode 100644
index 000000000..72c68c07e
Binary files /dev/null and b/FCL/src/main/assets/java/lib/jfr.jar differ
diff --git a/FCL/src/main/assets/java/lib/jfr/default.jfc b/FCL/src/main/assets/java/lib/jfr/default.jfc
new file mode 100644
index 000000000..92b302fec
--- /dev/null
+++ b/FCL/src/main/assets/java/lib/jfr/default.jfc
@@ -0,0 +1,845 @@
+
+
+
+
+
+
+
+ true
+ everyChunk
+
+
+
+ true
+ 1000 ms
+
+
+
+ true
+ everyChunk
+
+
+
+ true
+ 1000 ms
+
+
+
+ true
+
+
+
+ true
+
+
+
+ true
+ true
+ 20 ms
+
+
+
+ true
+ true
+ 20 ms
+
+
+
+ true
+ true
+ 20 ms
+
+
+
+ true
+ true
+ 20 ms
+
+
+
+ false
+ true
+ 20 ms
+
+
+
+ true
+ true
+ 0 ms
+
+
+
+ true
+ true
+ 0 ms
+
+
+
+ true
+ true
+ 0 ms
+
+
+
+ true
+ true
+
+
+
+ false
+ true
+ 0 ms
+
+
+
+ false
+ true
+
+
+
+ false
+
+
+
+ true
+ beginChunk
+
+
+
+ true
+ beginChunk
+
+
+
+ true
+ 20 ms
+
+
+
+ true
+ 20 ms
+
+
+
+ true
+ 10 ms
+
+
+
+ false
+ 10 ms
+
+
+
+ false
+ 10 ms
+
+
+
+ false
+ 10 ms
+
+
+
+ false
+ 10 ms
+
+
+
+ false
+ 10 ms
+
+
+
+ true
+ 10 ms
+
+
+
+ true
+ true
+
+
+
+ true
+ everyChunk
+
+
+
+ true
+ beginChunk
+
+
+
+ true
+ beginChunk
+
+
+
+ true
+ beginChunk
+
+
+
+ true
+ beginChunk
+
+
+
+ true
+ beginChunk
+
+
+
+ true
+ beginChunk
+
+
+
+ true
+ beginChunk
+
+
+
+ true
+
+
+
+ true
+
+
+
+ true
+
+
+
+ true
+
+
+
+ true
+
+
+
+ true
+
+
+
+ true
+
+
+
+ false
+ everyChunk
+
+
+
+ true
+ everyChunk
+
+
+
+ true
+ beginChunk
+
+
+
+ true
+ beginChunk
+
+
+
+ true
+ beginChunk
+
+
+
+ true
+ beginChunk
+
+
+
+ false
+
+
+
+ true
+
+
+
+ true
+
+
+
+ true
+
+
+
+ true
+
+
+
+ true
+
+
+
+ true
+ true
+
+
+
+ true
+ true
+
+
+
+ true
+
+
+
+ true
+ 0 ms
+
+
+
+ true
+ 0 ms
+
+
+
+ true
+ 0 ms
+
+
+
+ true
+ 0 ms
+
+
+
+ true
+ 0 ms
+
+
+
+ true
+ 0 ms
+
+
+
+ true
+ 0 ms
+
+
+
+ true
+ 0 ms
+
+
+
+ false
+ 0 ms
+
+
+
+ false
+ 0 ms
+
+
+
+ true
+ 0 ms
+
+
+
+ true
+
+
+
+ true
+
+
+
+ true
+
+
+
+ true
+
+
+
+ true
+
+
+
+ true
+
+
+
+ true
+
+
+
+ true
+
+
+
+ true
+
+
+
+ false
+
+
+
+ false
+
+
+
+ true
+
+
+
+ false
+ true
+
+
+
+ true
+
+
+
+ false
+ everyChunk
+
+
+
+ false
+
+
+
+ true
+ false
+ 0 ns
+
+
+
+ true
+ beginChunk
+
+
+
+ true
+ 1000 ms
+
+
+
+ true
+ 1000 ms
+
+
+
+ true
+ 60 s
+
+
+
+ false
+
+
+
+ false
+
+
+
+ true
+ beginChunk
+
+
+
+ true
+ everyChunk
+
+
+
+ true
+ 100 ms
+
+
+
+ true
+ beginChunk
+
+
+
+ true
+ everyChunk
+
+
+
+ true
+
+
+
+ true
+ beginChunk
+
+
+
+ true
+ beginChunk
+
+
+
+ true
+ 10 s
+
+
+
+ true
+ 1000 ms
+
+
+
+ true
+ 10 s
+
+
+
+ true
+ beginChunk
+
+
+
+ true
+ endChunk
+
+
+
+ true
+ 5 s
+
+
+
+ true
+ beginChunk
+
+
+
+ true
+ everyChunk
+
+
+
+ false
+ true
+
+
+
+ false
+ true
+
+
+
+ true
+ everyChunk
+
+
+
+ true
+ true
+ 20 ms
+
+
+
+ true
+ true
+ 20 ms
+
+
+
+ true
+ true
+ 20 ms
+
+
+
+ true
+ true
+ 20 ms
+
+
+
+ true
+ true
+ 20 ms
+
+
+
+ false
+ true
+
+
+
+ true
+ true
+
+
+
+ true
+ 1000 ms
+
+
+
+ true
+
+
+
+ true
+
+
+
+ true
+
+
+
+ true
+
+
+
+ true
+ 10 ms
+
+
+
+ true
+ 0 ms
+
+
+
+ true
+ 10 ms
+
+
+
+ true
+ 10 ms
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 20 ms
+
+ 20 ms
+
+ 20 ms
+
+ false
+
+
+
+
diff --git a/FCL/src/main/assets/java/lib/jfr/profile.jfc b/FCL/src/main/assets/java/lib/jfr/profile.jfc
new file mode 100644
index 000000000..1070a45fe
--- /dev/null
+++ b/FCL/src/main/assets/java/lib/jfr/profile.jfc
@@ -0,0 +1,846 @@
+
+
+
+
+
+
+
+ true
+ everyChunk
+
+
+
+ true
+ 1000 ms
+
+
+
+ true
+ everyChunk
+
+
+
+ true
+ 1000 ms
+
+
+
+ true
+
+
+
+ true
+
+
+
+ true
+ true
+ 10 ms
+
+
+
+ true
+ true
+ 10 ms
+
+
+
+ true
+ true
+ 10 ms
+
+
+
+ true
+ true
+ 10 ms
+
+
+
+ true
+ true
+ 10 ms
+
+
+
+ true
+ true
+ 0 ms
+
+
+
+ true
+ true
+ 0 ms
+
+
+
+ true
+ true
+ 0 ms
+
+
+
+ true
+ true
+
+
+
+ false
+ true
+ 0 ms
+
+
+
+ false
+ true
+
+
+
+ false
+
+
+
+ true
+ beginChunk
+
+
+
+ true
+ beginChunk
+
+
+
+ true
+ 10 ms
+
+
+
+ true
+ 20 ms
+
+
+
+ true
+ 0 ms
+
+
+
+ false
+ 0 ms
+
+
+
+ false
+ 0 ms
+
+
+
+ false
+ 0 ms
+
+
+
+ false
+ 0 ms
+
+
+
+ false
+ 0 ms
+
+
+
+ true
+ 0 ms
+
+
+
+ true
+ true
+
+
+
+ true
+ 60 s
+
+
+
+ true
+ beginChunk
+
+
+
+ true
+ beginChunk
+
+
+
+ true
+ beginChunk
+
+
+
+ true
+ beginChunk
+
+
+
+ true
+ beginChunk
+
+
+
+ true
+ beginChunk
+
+
+
+ true
+ beginChunk
+
+
+
+ true
+
+
+
+ true
+
+
+
+ true
+
+
+
+ true
+
+
+
+ true
+
+
+
+ true
+
+
+
+ true
+
+
+
+ false
+ everyChunk
+
+
+
+ true
+ everyChunk
+
+
+
+ true
+ beginChunk
+
+
+
+ true
+ beginChunk
+
+
+
+ true
+ beginChunk
+
+
+
+ true
+ beginChunk
+
+
+
+ false
+
+
+
+ true
+
+
+
+ true
+
+
+
+ true
+
+
+
+ true
+
+
+
+ true
+
+
+
+ true
+ true
+
+
+
+ true
+ true
+
+
+
+ true
+
+
+
+ true
+ 0 ms
+
+
+
+ true
+ 0 ms
+
+
+
+ true
+ 0 ms
+
+
+
+ true
+ 0 ms
+
+
+
+ true
+ 0 ms
+
+
+
+ true
+ 0 ms
+
+
+
+ true
+ 0 ms
+
+
+
+ true
+ 0 ms
+
+
+
+ false
+ 0 ms
+
+
+
+ false
+ 0 ms
+
+
+
+ true
+ 0 ms
+
+
+
+ true
+
+
+
+ true
+
+
+
+ true
+
+
+
+ true
+
+
+
+ true
+
+
+
+ true
+
+
+
+ true
+
+
+
+ true
+
+
+
+ true
+
+
+
+ true
+
+
+
+ true
+
+
+
+ true
+
+
+
+ false
+ true
+
+
+
+ true
+
+
+
+ false
+ everyChunk
+
+
+
+ false
+
+
+
+ true
+ true
+ 0 ns
+
+
+
+ true
+ beginChunk
+
+
+
+ true
+ 1000 ms
+
+
+
+ true
+ 100 ms
+
+
+
+ true
+ 10 s
+
+
+
+ true
+
+
+
+ false
+
+
+
+ true
+ beginChunk
+
+
+
+ true
+ everyChunk
+
+
+
+ true
+ 100 ms
+
+
+
+ true
+ beginChunk
+
+
+
+ true
+ everyChunk
+
+
+
+ true
+
+
+
+ true
+ beginChunk
+
+
+
+ true
+ beginChunk
+
+
+
+ true
+ 10 s
+
+
+
+ true
+ 1000 ms
+
+
+
+ true
+ 10 s
+
+
+
+ true
+ beginChunk
+
+
+
+ true
+ endChunk
+
+
+
+ true
+ 5 s
+
+
+
+ true
+ beginChunk
+
+
+
+ true
+ everyChunk
+
+
+
+ true
+ true
+
+
+
+ true
+ true
+
+
+
+ true
+ everyChunk
+
+
+
+ true
+ true
+ 10 ms
+
+
+
+ true
+ true
+ 10 ms
+
+
+
+ true
+ true
+ 10 ms
+
+
+
+ true
+ true
+ 10 ms
+
+
+
+ true
+ true
+ 10 ms
+
+
+
+ false
+ true
+
+
+
+ true
+ true
+
+
+
+ true
+ 1000 ms
+
+
+
+ true
+
+
+
+ true
+
+
+
+ true
+
+
+
+ true
+
+
+
+ true
+ 10 ms
+
+
+
+ true
+ 0 ms
+
+
+
+ 10 ms
+ true
+
+
+
+ true
+ 10 ms
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 10 ms
+
+ 10 ms
+
+ 10 ms
+
+ false
+
+
+
+
diff --git a/FCL/src/main/assets/java/lib/jsse.jar b/FCL/src/main/assets/java/lib/jsse.jar
new file mode 100644
index 000000000..7935fa32d
Binary files /dev/null and b/FCL/src/main/assets/java/lib/jsse.jar differ
diff --git a/FCL/src/main/assets/java/lib/jvm.hprof.txt b/FCL/src/main/assets/java/lib/jvm.hprof.txt
new file mode 100644
index 000000000..3c8e5fcdb
--- /dev/null
+++ b/FCL/src/main/assets/java/lib/jvm.hprof.txt
@@ -0,0 +1,86 @@
+Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+ - Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ - Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ - Neither the name of Oracle nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+Header for -agentlib:hprof (or -Xrunhprof) ASCII Output (JDK 5.0 JVMTI based)
+
+WARNING! This file format is under development, and is subject to
+change without notice.
+
+This file contains the following types of records:
+
+THREAD START
+THREAD END mark the lifetime of Java threads
+
+TRACE represents a Java stack trace. Each trace consists
+ of a series of stack frames. Other records refer to
+ TRACEs to identify (1) where object allocations have
+ taken place, (2) the frames in which GC roots were
+ found, and (3) frequently executed methods.
+
+HEAP DUMP is a complete snapshot of all live objects in the Java
+ heap. Following distinctions are made:
+
+ ROOT root set as determined by GC
+ CLS classes
+ OBJ instances
+ ARR arrays
+
+SITES is a sorted list of allocation sites. This identifies
+ the most heavily allocated object types, and the TRACE
+ at which those allocations occurred.
+
+CPU SAMPLES is a statistical profile of program execution. The VM
+ periodically samples all running threads, and assigns
+ a quantum to active TRACEs in those threads. Entries
+ in this record are TRACEs ranked by the percentage of
+ total quanta they consumed; top-ranked TRACEs are
+ typically hot spots in the program.
+
+CPU TIME is a profile of program execution obtained by measuring
+ the time spent in individual methods (excluding the time
+ spent in callees), as well as by counting the number of
+ times each method is called. Entries in this record are
+ TRACEs ranked by the percentage of total CPU time. The
+ "count" field indicates the number of times each TRACE
+ is invoked.
+
+MONITOR TIME is a profile of monitor contention obtained by measuring
+ the time spent by a thread waiting to enter a monitor.
+ Entries in this record are TRACEs ranked by the percentage
+ of total monitor contention time and a brief description
+ of the monitor. The "count" field indicates the number of
+ times the monitor was contended at that TRACE.
+
+MONITOR DUMP is a complete snapshot of all the monitors and threads in
+ the System.
+
+HEAP DUMP, SITES, CPU SAMPLES|TIME and MONITOR DUMP|TIME records are generated
+at program exit. They can also be obtained during program execution by typing
+Ctrl-\ (on Solaris) or by typing Ctrl-Break (on Win32).
diff --git a/FCL/src/main/assets/java/lib/logging.properties b/FCL/src/main/assets/java/lib/logging.properties
new file mode 100644
index 000000000..65cf1b1b7
--- /dev/null
+++ b/FCL/src/main/assets/java/lib/logging.properties
@@ -0,0 +1,59 @@
+############################################################
+# Default Logging Configuration File
+#
+# You can use a different file by specifying a filename
+# with the java.util.logging.config.file system property.
+# For example java -Djava.util.logging.config.file=myfile
+############################################################
+
+############################################################
+# Global properties
+############################################################
+
+# "handlers" specifies a comma separated list of log Handler
+# classes. These handlers will be installed during VM startup.
+# Note that these classes must be on the system classpath.
+# By default we only configure a ConsoleHandler, which will only
+# show messages at the INFO and above levels.
+handlers= java.util.logging.ConsoleHandler
+
+# To also add the FileHandler, use the following line instead.
+#handlers= java.util.logging.FileHandler, java.util.logging.ConsoleHandler
+
+# Default global logging level.
+# This specifies which kinds of events are logged across
+# all loggers. For any given facility this global level
+# can be overriden by a facility specific level
+# Note that the ConsoleHandler also has a separate level
+# setting to limit messages printed to the console.
+.level= INFO
+
+############################################################
+# Handler specific properties.
+# Describes specific configuration info for Handlers.
+############################################################
+
+# default file output is in user's home directory.
+java.util.logging.FileHandler.pattern = %h/java%u.log
+java.util.logging.FileHandler.limit = 50000
+java.util.logging.FileHandler.count = 1
+java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter
+
+# Limit the message that are printed on the console to INFO and above.
+java.util.logging.ConsoleHandler.level = INFO
+java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
+
+# Example to customize the SimpleFormatter output format
+# to print one-line log message like this:
+# : []
+#
+# java.util.logging.SimpleFormatter.format=%4$s: %5$s [%1$tc]%n
+
+############################################################
+# Facility specific properties.
+# Provides extra control for each logger.
+############################################################
+
+# For example, set the com.xyz.foo logger to only log SEVERE
+# messages:
+com.xyz.foo.level = SEVERE
diff --git a/FCL/src/main/assets/java/lib/management-agent.jar b/FCL/src/main/assets/java/lib/management-agent.jar
new file mode 100644
index 000000000..e015ba3da
Binary files /dev/null and b/FCL/src/main/assets/java/lib/management-agent.jar differ
diff --git a/FCL/src/main/assets/java/lib/management/jmxremote.access b/FCL/src/main/assets/java/lib/management/jmxremote.access
new file mode 100644
index 000000000..ce80b47a1
--- /dev/null
+++ b/FCL/src/main/assets/java/lib/management/jmxremote.access
@@ -0,0 +1,79 @@
+######################################################################
+# Default Access Control File for Remote JMX(TM) Monitoring
+######################################################################
+#
+# Access control file for Remote JMX API access to monitoring.
+# This file defines the allowed access for different roles. The
+# password file (jmxremote.password by default) defines the roles and their
+# passwords. To be functional, a role must have an entry in
+# both the password and the access files.
+#
+# The default location of this file is $JRE/lib/management/jmxremote.access
+# You can specify an alternate location by specifying a property in
+# the management config file $JRE/lib/management/management.properties
+# (See that file for details)
+#
+# The file format for password and access files is syntactically the same
+# as the Properties file format. The syntax is described in the Javadoc
+# for java.util.Properties.load.
+# A typical access file has multiple lines, where each line is blank,
+# a comment (like this one), or an access control entry.
+#
+# An access control entry consists of a role name, and an
+# associated access level. The role name is any string that does not
+# itself contain spaces or tabs. It corresponds to an entry in the
+# password file (jmxremote.password). The access level is one of the
+# following:
+# "readonly" grants access to read attributes of MBeans.
+# For monitoring, this means that a remote client in this
+# role can read measurements but cannot perform any action
+# that changes the environment of the running program.
+# "readwrite" grants access to read and write attributes of MBeans,
+# to invoke operations on them, and optionally
+# to create or remove them. This access should be granted
+# only to trusted clients, since they can potentially
+# interfere with the smooth operation of a running program.
+#
+# The "readwrite" access level can optionally be followed by the "create" and/or
+# "unregister" keywords. The "unregister" keyword grants access to unregister
+# (delete) MBeans. The "create" keyword grants access to create MBeans of a
+# particular class or of any class matching a particular pattern. Access
+# should only be granted to create MBeans of known and trusted classes.
+#
+# For example, the following entry would grant readwrite access
+# to "controlRole", as well as access to create MBeans of the class
+# javax.management.monitor.CounterMonitor and to unregister any MBean:
+# controlRole readwrite \
+# create javax.management.monitor.CounterMonitorMBean \
+# unregister
+# or equivalently:
+# controlRole readwrite unregister create javax.management.monitor.CounterMBean
+#
+# The following entry would grant readwrite access as well as access to create
+# MBeans of any class in the packages javax.management.monitor and
+# javax.management.timer:
+# controlRole readwrite \
+# create javax.management.monitor.*,javax.management.timer.* \
+# unregister
+#
+# The \ character is defined in the Properties file syntax to allow continuation
+# lines as shown here. A * in a class pattern matches a sequence of characters
+# other than dot (.), so javax.management.monitor.* matches
+# javax.management.monitor.CounterMonitor but not
+# javax.management.monitor.foo.Bar.
+#
+# A given role should have at most one entry in this file. If a role
+# has no entry, it has no access.
+# If multiple entries are found for the same role name, then the last
+# access entry is used.
+#
+#
+# Default access control entries:
+# o The "monitorRole" role has readonly access.
+# o The "controlRole" role has readwrite access and can create the standard
+# Timer and Monitor MBeans defined by the JMX API.
+
+monitorRole readonly
+controlRole readwrite \
+ create javax.management.monitor.*,javax.management.timer.* \
+ unregister
diff --git a/FCL/src/main/assets/java/lib/management/jmxremote.password.template b/FCL/src/main/assets/java/lib/management/jmxremote.password.template
new file mode 100644
index 000000000..a7e7daac5
--- /dev/null
+++ b/FCL/src/main/assets/java/lib/management/jmxremote.password.template
@@ -0,0 +1,64 @@
+# ----------------------------------------------------------------------
+# Template for jmxremote.password
+#
+# o Copy this template to jmxremote.password
+# o Set the user/password entries in jmxremote.password
+# o Change the permission of jmxremote.password to read-only
+# by the owner.
+#
+# See below for the location of jmxremote.password file.
+# ----------------------------------------------------------------------
+
+##############################################################
+# Password File for Remote JMX Monitoring
+##############################################################
+#
+# Password file for Remote JMX API access to monitoring. This
+# file defines the different roles and their passwords. The access
+# control file (jmxremote.access by default) defines the allowed
+# access for each role. To be functional, a role must have an entry
+# in both the password and the access files.
+#
+# Default location of this file is $JRE/lib/management/jmxremote.password
+# You can specify an alternate location by specifying a property in
+# the management config file $JRE/lib/management/management.properties
+# or by specifying a system property (See that file for details).
+
+
+##############################################################
+# File permissions of the jmxremote.password file
+##############################################################
+# Since there are cleartext passwords stored in this file,
+# this file must be readable by ONLY the owner,
+# otherwise the program will exit with an error.
+#
+# The file format for password and access files is syntactically the same
+# as the Properties file format. The syntax is described in the Javadoc
+# for java.util.Properties.load.
+# Typical password file has multiple lines, where each line is blank,
+# a comment (like this one), or a password entry.
+#
+#
+# A password entry consists of a role name and an associated
+# password. The role name is any string that does not itself contain
+# spaces or tabs. The password is again any string that does not
+# contain spaces or tabs. Note that passwords appear in the clear in
+# this file, so it is a good idea not to use valuable passwords.
+#
+# A given role should have at most one entry in this file. If a role
+# has no entry, it has no access.
+# If multiple entries are found for the same role name, then the last one
+# is used.
+#
+# In a typical installation, this file can be read by anybody on the
+# local machine, and possibly by people on other machines.
+# For # security, you should either restrict the access to this file,
+# or specify another, less accessible file in the management config file
+# as described above.
+#
+# Following are two commented-out entries. The "measureRole" role has
+# password "QED". The "controlRole" role has password "R&D".
+#
+# monitorRole QED
+# controlRole R&D
+
diff --git a/FCL/src/main/assets/java/lib/management/management.properties b/FCL/src/main/assets/java/lib/management/management.properties
new file mode 100644
index 000000000..70efa2eef
--- /dev/null
+++ b/FCL/src/main/assets/java/lib/management/management.properties
@@ -0,0 +1,331 @@
+#####################################################################
+# Default Configuration File for Java Platform Management
+#####################################################################
+#
+# The Management Configuration file (in java.util.Properties format)
+# will be read if one of the following system properties is set:
+# -Dcom.sun.management.jmxremote.port=
+# or -Dcom.sun.management.snmp.port=
+# or -Dcom.sun.management.config.file=
+#
+# The default Management Configuration file is:
+#
+# $JRE/lib/management/management.properties
+#
+# Another location for the Management Configuration File can be specified
+# by the following property on the Java command line:
+#
+# -Dcom.sun.management.config.file=
+#
+# If -Dcom.sun.management.config.file= is set, the port
+# number for the management agent can be specified in the config file
+# using the following lines:
+#
+# ################ Management Agent Port #########################
+#
+# For setting the JMX RMI agent port use the following line
+# com.sun.management.jmxremote.port=
+#
+# For setting the SNMP agent port use the following line
+# com.sun.management.snmp.port=
+
+#####################################################################
+# Optional Instrumentation
+#####################################################################
+#
+# By default only the basic instrumentation with low overhead is on.
+# The following properties allow to selectively turn on optional
+# instrumentation which are off by default and may have some
+# additional overhead.
+#
+# com.sun.management.enableThreadContentionMonitoring
+#
+# This option enables thread contention monitoring if the
+# Java virtual machine supports such instrumentation.
+# Refer to the specification for the java.lang.management.ThreadMBean
+# interface - see isThreadContentionMonitoringSupported() method.
+#
+
+# To enable thread contention monitoring, uncomment the following line
+# com.sun.management.enableThreadContentionMonitoring
+
+#####################################################################
+# SNMP Management Properties
+#####################################################################
+#
+# If the system property -Dcom.sun.management.snmp.port=
+# is set then
+# - The SNMP agent (with the Java virtual machine MIB) is started
+# that listens on the specified port for incoming SNMP requests.
+# - the following properties for read for SNMP management.
+#
+# The configuration can be specified only at startup time.
+# Later changes to the above system property (e.g. via setProperty method), this
+# config file, or the ACL file has no effect to the running SNMP agent.
+#
+
+#
+# ##################### SNMP Trap Port #########################
+#
+# com.sun.management.snmp.trap=
+# Specifies the remote port number at which managers are expected
+# to listen for trap. For each host defined in the ACL file,
+# the SNMP agent will send traps at :
+# Default for this property is 162.
+#
+
+# To set port for sending traps to a different port use the following line
+# com.sun.management.snmp.trap=
+
+#
+# ################ SNMP listen interface #########################
+#
+# com.sun.management.snmp.interface=
+# Specifies the local interface on which the SNMP agent will bind.
+# This is useful when running on machines which have several
+# interfaces defined. It makes it possible to listen to a specific
+# subnet accessible through that interface.
+# Default for this property is "localhost".
+#
+# The format of the value for that property is any string accepted
+# by java.net.InetAddress.getByName(String).
+#
+
+# For restricting the port on which SNMP agent listens use the following line
+# com.sun.management.snmp.interface=
+
+#
+# #################### SNMP ACL file #########################
+#
+# com.sun.management.snmp.acl=true|false
+# Default for this property is true. (Case for true/false ignored)
+# If this property is specified as false then the ACL file
+# is not checked: all manager hosts are allowed all access.
+#
+
+# For SNMP without checking ACL file uncomment the following line
+# com.sun.management.snmp.acl=false
+
+#
+# com.sun.management.snmp.acl.file=filepath
+# Specifies location for ACL file
+# This is optional - default location is
+# $JRE/lib/management/snmp.acl
+#
+# If the property "com.sun.management.snmp.acl" is set to false,
+# then this property and the ACL file are ignored.
+# Otherwise the ACL file must exist and be in the valid format.
+# If the ACL file is empty or non existent then no access is allowed.
+#
+# The SNMP agent will read the ACL file at startup time.
+# Modification to the ACL file has no effect to any running SNMP
+# agents which read that ACL file at startup.
+#
+
+# For a non-default acl file location use the following line
+# com.sun.management.snmp.acl.file=filepath
+
+#####################################################################
+# RMI Management Properties
+#####################################################################
+#
+# If system property -Dcom.sun.management.jmxremote.port=
+# is set then
+# - A MBean server is started
+# - JRE Platform MBeans are registered in the MBean server
+# - RMI connector is published in a private readonly registry at
+# specified port using a well known name, "jmxrmi"
+# - the following properties are read for JMX remote management.
+#
+# The configuration can be specified only at startup time.
+# Later changes to above system property (e.g. via setProperty method),
+# this config file, the password file, or the access file have no effect to the
+# running MBean server, the connector, or the registry.
+#
+
+#
+# ########## RMI connector settings for local management ##########
+#
+# com.sun.management.jmxremote.local.only=true|false
+# Default for this property is true. (Case for true/false ignored)
+# If this property is specified as true then the local JMX RMI connector
+# server will only accept connection requests from clients running on
+# the host where the out-of-the-box JMX management agent is running.
+# In order to ensure backwards compatibility this property could be
+# set to false. However, deploying the local management agent in this
+# way is discouraged because the local JMX RMI connector server will
+# accept connection requests from any client either local or remote.
+# For remote management the remote JMX RMI connector server should
+# be used instead with authentication and SSL/TLS encryption enabled.
+#
+
+# For allowing the local management agent accept local
+# and remote connection requests use the following line
+# com.sun.management.jmxremote.local.only=false
+
+#
+# ###################### RMI SSL #############################
+#
+# com.sun.management.jmxremote.ssl=true|false
+# Default for this property is true. (Case for true/false ignored)
+# If this property is specified as false then SSL is not used.
+#
+
+# For RMI monitoring without SSL use the following line
+# com.sun.management.jmxremote.ssl=false
+
+# com.sun.management.jmxremote.ssl.config.file=filepath
+# Specifies the location of the SSL configuration file. A properties
+# file can be used to supply the keystore and truststore location and
+# password settings thus avoiding to pass them as cleartext in the
+# command-line.
+#
+# The current implementation of the out-of-the-box management agent will
+# look up and use the properties specified below to configure the SSL
+# keystore and truststore, if present:
+# javax.net.ssl.keyStore=
+# javax.net.ssl.keyStorePassword=
+# javax.net.ssl.trustStore=
+# javax.net.ssl.trustStorePassword=
+# Any other properties in the file will be ignored. This will allow us
+# to extend the property set in the future if required by the default
+# SSL implementation.
+#
+# If the property "com.sun.management.jmxremote.ssl" is set to false,
+# then this property is ignored.
+#
+
+# For supplying the keystore settings in a file use the following line
+# com.sun.management.jmxremote.ssl.config.file=filepath
+
+# com.sun.management.jmxremote.ssl.enabled.cipher.suites=
+# The value of this property is a string that is a comma-separated list
+# of SSL/TLS cipher suites to enable. This property can be specified in
+# conjunction with the previous property "com.sun.management.jmxremote.ssl"
+# in order to control which particular SSL/TLS cipher suites are enabled
+# for use by accepted connections. If this property is not specified then
+# the SSL/TLS RMI Server Socket Factory uses the SSL/TLS cipher suites that
+# are enabled by default.
+#
+
+# com.sun.management.jmxremote.ssl.enabled.protocols=
+# The value of this property is a string that is a comma-separated list
+# of SSL/TLS protocol versions to enable. This property can be specified in
+# conjunction with the previous property "com.sun.management.jmxremote.ssl"
+# in order to control which particular SSL/TLS protocol versions are
+# enabled for use by accepted connections. If this property is not
+# specified then the SSL/TLS RMI Server Socket Factory uses the SSL/TLS
+# protocol versions that are enabled by default.
+#
+
+# com.sun.management.jmxremote.ssl.need.client.auth=true|false
+# Default for this property is false. (Case for true/false ignored)
+# If this property is specified as true in conjunction with the previous
+# property "com.sun.management.jmxremote.ssl" then the SSL/TLS RMI Server
+# Socket Factory will require client authentication.
+#
+
+# For RMI monitoring with SSL client authentication use the following line
+# com.sun.management.jmxremote.ssl.need.client.auth=true
+
+# com.sun.management.jmxremote.registry.ssl=true|false
+# Default for this property is false. (Case for true/false ignored)
+# If this property is specified as true then the RMI registry used
+# to bind the RMIServer remote object is protected with SSL/TLS
+# RMI Socket Factories that can be configured with the properties:
+# com.sun.management.jmxremote.ssl.config.file
+# com.sun.management.jmxremote.ssl.enabled.cipher.suites
+# com.sun.management.jmxremote.ssl.enabled.protocols
+# com.sun.management.jmxremote.ssl.need.client.auth
+# If the two properties below are true at the same time, i.e.
+# com.sun.management.jmxremote.ssl=true
+# com.sun.management.jmxremote.registry.ssl=true
+# then the RMIServer remote object and the RMI registry are
+# both exported with the same SSL/TLS RMI Socket Factories.
+#
+
+# For using an SSL/TLS protected RMI registry use the following line
+# com.sun.management.jmxremote.registry.ssl=true
+
+#
+# ################ RMI User authentication ################
+#
+# com.sun.management.jmxremote.authenticate=true|false
+# Default for this property is true. (Case for true/false ignored)
+# If this property is specified as false then no authentication is
+# performed and all users are allowed all access.
+#
+
+# For RMI monitoring without any checking use the following line
+# com.sun.management.jmxremote.authenticate=false
+
+#
+# ################ RMI Login configuration ###################
+#
+# com.sun.management.jmxremote.login.config=
+# Specifies the name of a JAAS login configuration entry to use when
+# authenticating users of RMI monitoring.
+#
+# Setting this property is optional - the default login configuration
+# specifies a file-based authentication that uses the password file.
+#
+# When using this property to override the default login configuration
+# then the named configuration entry must be in a file that gets loaded
+# by JAAS. In addition, the login module(s) specified in the configuration
+# should use the name and/or password callbacks to acquire the user's
+# credentials. See the NameCallback and PasswordCallback classes in the
+# javax.security.auth.callback package for more details.
+#
+# If the property "com.sun.management.jmxremote.authenticate" is set to
+# false, then this property and the password & access files are ignored.
+#
+
+# For a non-default login configuration use the following line
+# com.sun.management.jmxremote.login.config=
+
+#
+# ################ RMI Password file location ##################
+#
+# com.sun.management.jmxremote.password.file=filepath
+# Specifies location for password file
+# This is optional - default location is
+# $JRE/lib/management/jmxremote.password
+#
+# If the property "com.sun.management.jmxremote.authenticate" is set to
+# false, then this property and the password & access files are ignored.
+# Otherwise the password file must exist and be in the valid format.
+# If the password file is empty or non-existent then no access is allowed.
+#
+
+# For a non-default password file location use the following line
+# com.sun.management.jmxremote.password.file=filepath
+
+#
+# ################ RMI Access file location #####################
+#
+# com.sun.management.jmxremote.access.file=filepath
+# Specifies location for access file
+# This is optional - default location is
+# $JRE/lib/management/jmxremote.access
+#
+# If the property "com.sun.management.jmxremote.authenticate" is set to
+# false, then this property and the password & access files are ignored.
+# Otherwise, the access file must exist and be in the valid format.
+# If the access file is empty or non-existent then no access is allowed.
+#
+
+# For a non-default password file location use the following line
+# com.sun.management.jmxremote.access.file=filepath
+#
+
+# ################ Management agent listen interface #########################
+#
+# com.sun.management.jmxremote.host=
+# Specifies the local interface on which the JMX RMI agent will bind.
+# This is useful when running on machines which have several
+# interfaces defined. It makes it possible to listen to a specific
+# subnet accessible through that interface.
+#
+# The format of the value for that property is any string accepted
+# by java.net.InetAddress.getByName(String).
+#
diff --git a/FCL/src/main/assets/java/lib/management/snmp.acl.template b/FCL/src/main/assets/java/lib/management/snmp.acl.template
new file mode 100644
index 000000000..0e766764f
--- /dev/null
+++ b/FCL/src/main/assets/java/lib/management/snmp.acl.template
@@ -0,0 +1,110 @@
+# ----------------------------------------------------------------------
+# Template for SNMP Access Control List File
+#
+# o Copy this template to snmp.acl
+# o Set access control for SNMP support
+# o Change the permission of snmp.acl to be read-only
+# by the owner.
+#
+# See below for the location of snmp.acl file.
+# ----------------------------------------------------------------------
+
+############################################################
+# SNMP Access Control List File
+############################################################
+#
+# Default location of this file is $JRE/lib/management/snmp.acl.
+# You can specify an alternate location by specifying a property in
+# the management config file $JRE/lib/management/management.properties
+# or by specifying a system property (See that file for details).
+#
+
+
+##############################################################
+# File permissions of the snmp.acl file
+##############################################################
+#
+# Since there are cleartext community strings stored in this file,
+# this ACL file must be readable by ONLY the owner,
+# otherwise the program will exit with an error.
+#
+##############################################################
+# Format of the acl group
+##############################################################
+#
+# communities: a list of SNMP community strings to which the
+# access control applies separated by commas.
+#
+# access: either "read-only" or "read-write".
+#
+# managers: a list of hosts to be granted the access rights.
+# Each can be expressed as any one of the following:
+# - hostname: hubble
+# - ip v4 and v6 addresses: 123.456.789.12 , fe80::a00:20ff:fe9b:ea82
+# - ip v4 and v6 netmask prefix notation: 123.456.789.0/24,
+# fe80::a00:20ff:fe9b:ea82/64
+# see RFC 2373 (http://www.ietf.org/rfc/rfc2373.txt)
+#
+# An example of two community groups for multiple hosts:
+# acl = {
+# {
+# communities = public, private
+# access = read-only
+# managers = hubble, snowbell, nanak
+# }
+# {
+# communities = jerry
+# access = read-write
+# managers = hubble, telescope
+# }
+# }
+#
+##############################################################
+# Format of the trap group
+##############################################################
+#
+# trap-community: a single SNMP community string that will be included
+# in the traps sent to the hosts.
+#
+# hosts: a list of hosts to which the SNMP agent will send traps.
+#
+# An example of two trap community definitions for multiple hosts:
+# trap = {
+# {
+# trap-community = public
+# hosts = hubble, snowbell
+# }
+# {
+# trap-community = private
+# hosts = telescope
+# }
+# }
+#
+############################################################
+#
+# Update the community strings (public and private) below
+# before copying this template file
+#
+# Common SNMP ACL Example
+# ------------------------
+#
+# o Only localhost can connect, and access rights
+# are limited to read-only
+# o Traps are sent to localhost only
+#
+#
+# acl = {
+# {
+# communities = public, private
+# access = read-only
+# managers = localhost
+# }
+# }
+#
+#
+# trap = {
+# {
+# trap-community = public
+# hosts = localhost
+# }
+# }
diff --git a/FCL/src/main/assets/java/lib/meta-index b/FCL/src/main/assets/java/lib/meta-index
new file mode 100644
index 000000000..3a10c815d
--- /dev/null
+++ b/FCL/src/main/assets/java/lib/meta-index
@@ -0,0 +1,88 @@
+% VERSION 2
+% WARNING: this file is auto-generated; do not edit
+% UNSUPPORTED: this file and its format may change and/or
+% may be removed in a future release
+# charsets.jar
+sun/nio
+sun/awt
+! jce.jar
+javax/crypto
+sun/security
+# jfr.jar
+jdk/jfr
+jdk/management
+! jsse.jar
+sun/security
+com/sun/net/
+! management-agent.jar
+@ resources.jar
+com/sun/java/util/jar/pack/
+META-INF/services/sun.util.spi.XmlPropertiesProvider
+META-INF/services/javax.print.PrintServiceLookup
+com/sun/corba/
+META-INF/services/javax.sound.midi.spi.SoundbankReader
+sun/print
+META-INF/services/javax.sound.midi.spi.MidiFileReader
+META-INF/services/sun.java2d.cmm.CMMServiceProvider
+javax/swing
+META-INF/services/javax.sound.sampled.spi.AudioFileReader
+META-INF/services/javax.sound.midi.spi.MidiDeviceProvider
+sun/net
+META-INF/services/javax.sound.sampled.spi.AudioFileWriter
+com/sun/imageio/
+META-INF/services/sun.java2d.pipe.RenderingEngine
+META-INF/mimetypes.default
+META-INF/services/javax.sound.midi.spi.MidiFileWriter
+sun/rmi
+javax/sql
+META-INF/services/com.sun.tools.internal.ws.wscompile.Plugin
+com/sun/rowset/
+META-INF/services/javax.print.StreamPrintServiceFactory
+META-INF/mailcap.default
+java/lang
+sun/text
+javax/xml
+META-INF/services/javax.sound.sampled.spi.MixerProvider
+com/sun/xml/
+META-INF/services/com.sun.tools.internal.xjc.Plugin
+com/sun/java/swing/
+com/sun/jndi/
+com/sun/org/
+META-INF/services/javax.sound.sampled.spi.FormatConversionProvider
+! rt.jar
+com/sun/java/util/jar/pack/
+java/
+org/ietf/
+com/sun/beans/
+com/sun/tracing/
+com/sun/java/browser/
+com/sun/corba/
+com/sun/media/
+com/sun/awt/
+com/sun/management/
+sun/
+com/sun/jmx/
+com/sun/demo/
+com/sun/imageio/
+com/sun/net/
+com/sun/rmi/
+org/w3c/
+com/sun/swing/
+com/sun/activation/
+com/sun/nio/
+com/sun/rowset/
+org/jcp/
+com/sun/istack/
+jdk/
+com/sun/naming/
+org/xml/
+org/omg/
+com/sun/security/
+com/sun/xml/
+com/sun/java/swing/
+com/oracle/
+com/sun/java_cup/
+com/sun/jndi/
+com/sun/accessibility/
+com/sun/org/
+javax/
diff --git a/FCL/src/main/assets/java/lib/net.properties b/FCL/src/main/assets/java/lib/net.properties
new file mode 100644
index 000000000..a541eef9e
--- /dev/null
+++ b/FCL/src/main/assets/java/lib/net.properties
@@ -0,0 +1,121 @@
+############################################################
+# Default Networking Configuration File
+#
+# This file may contain default values for the networking system properties.
+# These values are only used when the system properties are not specified
+# on the command line or set programatically.
+# For now, only the various proxy settings can be configured here.
+############################################################
+
+# Whether or not the DefaultProxySelector will default to System Proxy
+# settings when they do exist.
+# Set it to 'true' to enable this feature and check for platform
+# specific proxy settings
+# Note that the system properties that do explicitely set proxies
+# (like http.proxyHost) do take precedence over the system settings
+# even if java.net.useSystemProxies is set to true.
+
+java.net.useSystemProxies=false
+
+#------------------------------------------------------------------------
+# Proxy configuration for the various protocol handlers.
+# DO NOT uncomment these lines if you have set java.net.useSystemProxies
+# to true as the protocol specific properties will take precedence over
+# system settings.
+#------------------------------------------------------------------------
+
+# HTTP Proxy settings. proxyHost is the name of the proxy server
+# (e.g. proxy.mydomain.com), proxyPort is the port number to use (default
+# value is 80) and nonProxyHosts is a '|' separated list of hostnames which
+# should be accessed directly, ignoring the proxy server (default value is
+# localhost & 127.0.0.1).
+#
+# http.proxyHost=
+# http.proxyPort=80
+http.nonProxyHosts=localhost|127.*|[::1]
+#
+# HTTPS Proxy Settings. proxyHost is the name of the proxy server
+# (e.g. proxy.mydomain.com), proxyPort is the port number to use (default
+# value is 443). The HTTPS protocol handlers uses the http nonProxyHosts list.
+#
+# https.proxyHost=
+# https.proxyPort=443
+#
+# FTP Proxy settings. proxyHost is the name of the proxy server
+# (e.g. proxy.mydomain.com), proxyPort is the port number to use (default
+# value is 80) and nonProxyHosts is a '|' separated list of hostnames which
+# should be accessed directly, ignoring the proxy server (default value is
+# localhost & 127.0.0.1).
+#
+# ftp.proxyHost=
+# ftp.proxyPort=80
+ftp.nonProxyHosts=localhost|127.*|[::1]
+#
+# Gopher Proxy settings. proxyHost is the name of the proxy server
+# (e.g. proxy.mydomain.com), proxyPort is the port number to use (default
+# value is 80)
+#
+# gopher.proxyHost=
+# gopher.proxyPort=80
+#
+# Socks proxy settings. socksProxyHost is the name of the proxy server
+# (e.g. socks.domain.com), socksProxyPort is the port number to use
+# (default value is 1080)
+#
+# socksProxyHost=
+# socksProxyPort=1080
+#
+# HTTP Keep Alive settings. remainingData is the maximum amount of data
+# in kilobytes that will be cleaned off the underlying socket so that it
+# can be reused (default value is 512K), queuedConnections is the maximum
+# number of Keep Alive connections to be on the queue for clean up (default
+# value is 10).
+# http.KeepAlive.remainingData=512
+# http.KeepAlive.queuedConnections=10
+
+# Authentication Scheme restrictions for HTTP and HTTPS.
+#
+# In some environments certain authentication schemes may be undesirable
+# when proxying HTTP or HTTPS. For example, "Basic" results in effectively the
+# cleartext transmission of the user's password over the physical network.
+# This section describes the mechanism for disabling authentication schemes
+# based on the scheme name. Disabled schemes will be treated as if they are not
+# supported by the implementation.
+#
+# The 'jdk.http.auth.tunneling.disabledSchemes' property lists the authentication
+# schemes that will be disabled when tunneling HTTPS over a proxy, HTTP CONNECT.
+# The 'jdk.http.auth.proxying.disabledSchemes' property lists the authentication
+# schemes that will be disabled when proxying HTTP.
+#
+# In both cases the property is a comma-separated list of, case-insensitive,
+# authentication scheme names, as defined by their relevant RFCs. An
+# implementation may, but is not required to, support common schemes whose names
+# include: 'Basic', 'Digest', 'NTLM', 'Kerberos', 'Negotiate'. A scheme that
+# is not known, or not supported, by the implementation is ignored.
+#
+# Note: This property is currently used by the JDK Reference implementation. It
+# is not guaranteed to be examined and used by other implementations.
+#
+#jdk.http.auth.proxying.disabledSchemes=
+jdk.http.auth.tunneling.disabledSchemes=Basic
+
+#
+# Transparent NTLM HTTP authentication mode on Windows. Transparent authentication
+# can be used for the NTLM scheme, where the security credentials based on the
+# currently logged in user's name and password can be obtained directly from the
+# operating system, without prompting the user. This property has three possible
+# values which regulate the behavior as shown below. Other unrecognized values
+# are handled the same as 'disabled'. Note, that NTLM is not considered to be a
+# strongly secure authentication scheme and care should be taken before enabling
+# this mechanism.
+#
+# Transparent authentication never used.
+#jdk.http.ntlm.transparentAuth=disabled
+#
+# Enabled for all hosts.
+#jdk.http.ntlm.transparentAuth=allHosts
+#
+# Enabled for hosts that are trusted in Windows Internet settings
+#jdk.http.ntlm.transparentAuth=trustedHosts
+#
+jdk.http.ntlm.transparentAuth=disabled
diff --git a/FCL/src/main/assets/java/lib/psfont.properties.ja b/FCL/src/main/assets/java/lib/psfont.properties.ja
new file mode 100644
index 000000000..d17cf40d1
--- /dev/null
+++ b/FCL/src/main/assets/java/lib/psfont.properties.ja
@@ -0,0 +1,119 @@
+#
+#
+# Copyright (c) 1996, 2000, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code 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
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+#
+# Japanese PostScript printer property file
+#
+font.num=16
+#
+serif=serif
+timesroman=serif
+sansserif=sansserif
+helvetica=sansserif
+monospaced=monospaced
+courier=monospaced
+dialog=sansserif
+dialoginput=monospaced
+#
+serif.latin1.plain=Times-Roman
+serif.latin1.italic=Times-Italic
+serif.latin1.bolditalic=Times-BoldItalic
+serif.latin1.bold=Times-Bold
+#
+sansserif.latin1.plain=Helvetica
+sansserif.latin1.italic=Helvetica-Oblique
+sansserif.latin1.bolditalic=Helvetica-BoldOblique
+sansserif.latin1.bold=Helvetica-Bold
+#
+monospaced.latin1.plain=Courier
+monospaced.latin1.italic=Courier-Oblique
+monospaced.latin1.bolditalic=Courier-BoldOblique
+monospaced.latin1.bold=Courier-Bold
+#
+serif.x11jis0208.plain=Ryumin-Light-H
+serif.x11jis0208.italic=Ryumin-Light-H
+serif.x11jis0208.bolditalic=Ryumin-Light-H
+serif.x11jis0208.bold=Ryumin-Light-H
+#
+sansserif.x11jis0208.plain=GothicBBB-Medium-H
+sansserif.x11jis0208.italic=GothicBBB-Medium-H
+sansserif.x11jis0208.bolditalic=GothicBBB-Medium-H
+sansserif.x11jis0208.bold=GothicBBB-Medium-H
+#
+monospaced.x11jis0208.plain=GothicBBB-Medium-H
+monospaced.x11jis0208.italic=GothicBBB-Medium-H
+monospaced.x11jis0208.bolditalic=GothicBBB-Medium-H
+monospaced.x11jis0208.bold=GothicBBB-Medium-H
+#
+serif.x11jis0201.plain=Ryumin-Light.Hankaku
+serif.x11jis0201.italic=Ryumin-Light.Hankaku
+serif.x11jis0201.bolditalic=Ryumin-Light.Hankaku
+serif.x11jis0201.bold=Ryumin-Light.Hankaku
+#
+sansserif.x11jis0201.plain=GothicBBB-Medium.Hankaku
+sansserif.x11jis0201.italic=GothicBBB-Medium.Hankaku
+sansserif.x11jis0201.bolditalic=GothicBBB-Medium.Hankaku
+sansserif.x11jis0201.bold=GothicBBB-Medium.Hankaku
+#
+monospaced.x11jis0201.plain=GothicBBB-Medium.Hankaku
+monospaced.x11jis0201.italic=GothicBBB-Medium.Hankaku
+monospaced.x11jis0201.bolditalic=GothicBBB-Medium.Hankaku
+monospaced.x11jis0201.bold=GothicBBB-Medium.Hankaku
+#
+Helvetica=0
+Helvetica-Bold=1
+Helvetica-Oblique=2
+Helvetica-BoldOblique=3
+Times-Roman=4
+Times-Bold=5
+Times-Italic=6
+Times-BoldItalic=7
+Courier=8
+Courier-Bold=9
+Courier-Oblique=10
+Courier-BoldOblique=11
+GothicBBB-Medium-H=12
+Ryumin-Light-H=13
+GothicBBB-Medium.Hankaku=14
+Ryumin-Light.Hankaku=15
+#
+font.0=Helvetica ISOF
+font.1=Helvetica-Bold ISOF
+font.2=Helvetica-Oblique ISOF
+font.3=Helvetica-BoldOblique ISOF
+font.4=Times-Roman ISOF
+font.5=Times-Bold ISOF
+font.6=Times-Italic ISOF
+font.7=Times-BoldItalic ISOF
+font.8=Courier ISOF
+font.9=Courier-Bold ISOF
+font.10=Courier-Oblique ISOF
+font.11=Courier-BoldOblique ISOF
+font.12=GothicBBB-Medium-H findfont
+font.13=Ryumin-Light-H findfont
+font.14=GothicBBB-Medium.Hankaku findfont
+font.15=Ryumin-Light.Hankaku findfont
+#
diff --git a/FCL/src/main/assets/java/lib/psfontj2d.properties b/FCL/src/main/assets/java/lib/psfontj2d.properties
new file mode 100644
index 000000000..5eb2c4b8b
--- /dev/null
+++ b/FCL/src/main/assets/java/lib/psfontj2d.properties
@@ -0,0 +1,323 @@
+#
+#
+# Copyright (c) 1999, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code 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
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+
+#
+# PostScript printer property file for Java 2D printing.
+#
+# WARNING: This is an internal implementation file, not a public file.
+# Any customisation or reliance on the existence of this file and its
+# contents or syntax is discouraged and unsupported.
+# It may be incompatibly changed or removed without any notice.
+#
+#
+font.num=35
+#
+# Legacy logical font family names and logical font aliases should all
+# map to the primary logical font names.
+#
+serif=serif
+times=serif
+timesroman=serif
+sansserif=sansserif
+helvetica=sansserif
+dialog=sansserif
+dialoginput=monospaced
+monospaced=monospaced
+courier=monospaced
+#
+# Next, physical fonts which can be safely mapped to standard postscript fonts
+# These keys generally map to a value which is the same as the key, so
+# the key/value is just a way to say the font has a mapping.
+# Sometimes however we map more than one screen font to the same PS font.
+#
+avantgarde=avantgarde_book
+avantgarde_book=avantgarde_book
+avantgarde_demi=avantgarde_demi
+avantgarde_book_oblique=avantgarde_book_oblique
+avantgarde_demi_oblique=avantgarde_demi_oblique
+#
+itcavantgarde=avantgarde_book
+itcavantgarde=avantgarde_book
+itcavantgarde_demi=avantgarde_demi
+itcavantgarde_oblique=avantgarde_book_oblique
+itcavantgarde_demi_oblique=avantgarde_demi_oblique
+#
+bookman=bookman_light
+bookman_light=bookman_light
+bookman_demi=bookman_demi
+bookman_light_italic=bookman_light_italic
+bookman_demi_italic=bookman_demi_italic
+#
+# Exclude "helvetica" on its own as that's a legacy name for a logical font
+helvetica_bold=helvetica_bold
+helvetica_oblique=helvetica_oblique
+helvetica_bold_oblique=helvetica_bold_oblique
+#
+itcbookman_light=bookman_light
+itcbookman_demi=bookman_demi
+itcbookman_light_italic=bookman_light_italic
+itcbookman_demi_italic=bookman_demi_italic
+#
+# Exclude "courier" on its own as that's a legacy name for a logical font
+courier_bold=courier_bold
+courier_oblique=courier_oblique
+courier_bold_oblique=courier_bold_oblique
+#
+courier_new=courier
+courier_new_bold=courier_bold
+#
+monotype_century_schoolbook=newcenturyschoolbook
+monotype_century_schoolbook_bold=newcenturyschoolbook_bold
+monotype_century_schoolbook_italic=newcenturyschoolbook_italic
+monotype_century_schoolbook_bold_italic=newcenturyschoolbook_bold_italic
+#
+newcenturyschoolbook=newcenturyschoolbook
+newcenturyschoolbook_bold=newcenturyschoolbook_bold
+newcenturyschoolbook_italic=newcenturyschoolbook_italic
+newcenturyschoolbook_bold_italic=newcenturyschoolbook_bold_italic
+#
+palatino=palatino
+palatino_bold=palatino_bold
+palatino_italic=palatino_italic
+palatino_bold_italic=palatino_bold_italic
+#
+# Exclude "times" on its own as that's a legacy name for a logical font
+times_bold=times_roman_bold
+times_italic=times_roman_italic
+times_bold_italic=times_roman_bold_italic
+#
+times_roman=times_roman
+times_roman_bold=times_roman_bold
+times_roman_italic=times_roman_italic
+times_roman_bold_italic=times_roman_bold_italic
+#
+times_new_roman=times_roman
+times_new_roman_bold=times_roman_bold
+times_new_roman_italic=times_roman_italic
+times_new_roman_bold_italic=times_roman_bold_italic
+#
+zapfchancery_italic=zapfchancery_italic
+itczapfchancery_italic=zapfchancery_italic
+#
+# Next the mapping of the font name + charset + style to Postscript font name
+# for the logical fonts.
+#
+serif.latin1.plain=Times-Roman
+serif.latin1.bold=Times-Bold
+serif.latin1.italic=Times-Italic
+serif.latin1.bolditalic=Times-BoldItalic
+serif.symbol.plain=Symbol
+serif.dingbats.plain=ZapfDingbats
+serif.symbol.bold=Symbol
+serif.dingbats.bold=ZapfDingbats
+serif.symbol.italic=Symbol
+serif.dingbats.italic=ZapfDingbats
+serif.symbol.bolditalic=Symbol
+serif.dingbats.bolditalic=ZapfDingbats
+#
+sansserif.latin1.plain=Helvetica
+sansserif.latin1.bold=Helvetica-Bold
+sansserif.latin1.italic=Helvetica-Oblique
+sansserif.latin1.bolditalic=Helvetica-BoldOblique
+sansserif.symbol.plain=Symbol
+sansserif.dingbats.plain=ZapfDingbats
+sansserif.symbol.bold=Symbol
+sansserif.dingbats.bold=ZapfDingbats
+sansserif.symbol.italic=Symbol
+sansserif.dingbats.italic=ZapfDingbats
+sansserif.symbol.bolditalic=Symbol
+sansserif.dingbats.bolditalic=ZapfDingbats
+#
+monospaced.latin1.plain=Courier
+monospaced.latin1.bold=Courier-Bold
+monospaced.latin1.italic=Courier-Oblique
+monospaced.latin1.bolditalic=Courier-BoldOblique
+monospaced.symbol.plain=Symbol
+monospaced.dingbats.plain=ZapfDingbats
+monospaced.symbol.bold=Symbol
+monospaced.dingbats.bold=ZapfDingbats
+monospaced.symbol.italic=Symbol
+monospaced.dingbats.italic=ZapfDingbats
+monospaced.symbol.bolditalic=Symbol
+monospaced.dingbats.bolditalic=ZapfDingbats
+#
+# Next the mapping of the font name + charset + style to Postscript font name
+# for the physical fonts. Since these always report style as plain, the
+# style key is always plain. So we map using the face name to the correct
+# style for the postscript font. This is possible since the face names can
+# be replied upon to be different for each style.
+# However an application may try to create a Font applying a style to an
+# physical name. We want to map to the correct Postscript font there too
+# if possible but we do not map cases where the application tries to
+# augment a style (eg ask for a bold version of a bold font)
+# Defer to the 2D package to attempt create an artificially styled version
+#
+avantgarde_book.latin1.plain=AvantGarde-Book
+avantgarde_demi.latin1.plain=AvantGarde-Demi
+avantgarde_book_oblique.latin1.plain=AvantGarde-BookOblique
+avantgarde_demi_oblique.latin1.plain=AvantGarde-DemiOblique
+#
+avantgarde_book.latin1.bold=AvantGarde-Demi
+avantgarde_book.latin1.italic=AvantGarde-BookOblique
+avantgarde_book.latin1.bolditalic=AvantGarde-DemiOblique
+avantgarde_demi.latin1.italic=AvantGarde-DemiOblique
+avantgarde_book_oblique.latin1.bold=AvantGarde-DemiOblique
+#
+bookman_light.latin1.plain=Bookman-Light
+bookman_demi.latin1.plain=Bookman-Demi
+bookman_light_italic.latin1.plain=Bookman-LightItalic
+bookman_demi_italic.latin1.plain=Bookman-DemiItalic
+#
+bookman_light.latin1.bold=Bookman-Demi
+bookman_light.latin1.italic=Bookman-LightItalic
+bookman_light.latin1.bolditalic=Bookman-DemiItalic
+bookman_light_bold.latin1.italic=Bookman-DemiItalic
+bookman_light_italic.latin1.bold=Bookman-DemiItalic
+#
+courier.latin1.plain=Courier
+courier_bold.latin1.plain=Courier-Bold
+courier_oblique.latin1.plain=Courier-Oblique
+courier_bold_oblique.latin1.plain=Courier-BoldOblique
+courier.latin1.bold=Courier-Bold
+courier.latin1.italic=Courier-Oblique
+courier.latin1.bolditalic=Courier-BoldOblique
+courier_bold.latin1.italic=Courier-BoldOblique
+courier_italic.latin1.bold=Courier-BoldOblique
+#
+helvetica_bold.latin1.plain=Helvetica-Bold
+helvetica_oblique.latin1.plain=Helvetica-Oblique
+helvetica_bold_oblique.latin1.plain=Helvetica-BoldOblique
+helvetica.latin1.bold=Helvetica-Bold
+helvetica.latin1.italic=Helvetica-Oblique
+helvetica.latin1.bolditalic=Helvetica-BoldOblique
+helvetica_bold.latin1.italic=Helvetica-BoldOblique
+helvetica_italic.latin1.bold=Helvetica-BoldOblique
+#
+newcenturyschoolbook.latin1.plain=NewCenturySchlbk-Roman
+newcenturyschoolbook_bold.latin1.plain=NewCenturySchlbk-Bold
+newcenturyschoolbook_italic.latin1.plain=NewCenturySchlbk-Italic
+newcenturyschoolbook_bold_italic.latin1.plain=NewCenturySchlbk-BoldItalic
+newcenturyschoolbook.latin1.bold=NewCenturySchlbk-Bold
+newcenturyschoolbook.latin1.italic=NewCenturySchlbk-Italic
+newcenturyschoolbook.latin1.bolditalic=NewCenturySchlbk-BoldItalic
+newcenturyschoolbook_bold.latin1.italic=NewCenturySchlbk-BoldItalic
+newcenturyschoolbook_italic.latin1.bold=NewCenturySchlbk-BoldItalic
+#
+palatino.latin1.plain=Palatino-Roman
+palatino_bold.latin1.plain=Palatino-Bold
+palatino_italic.latin1.plain=Palatino-Italic
+palatino_bold_italic.latin1.plain=Palatino-BoldItalic
+palatino.latin1.bold=Palatino-Bold
+palatino.latin1.italic=Palatino-Italic
+palatino.latin1.bolditalic=Palatino-BoldItalic
+palatino_bold.latin1.italic=Palatino-BoldItalic
+palatino_italic.latin1.bold=Palatino-BoldItalic
+#
+times_roman.latin1.plain=Times-Roman
+times_roman_bold.latin1.plain=Times-Bold
+times_roman_italic.latin1.plain=Times-Italic
+times_roman_bold_italic.latin1.plain=Times-BoldItalic
+times_roman.latin1.bold=Times-Bold
+times_roman.latin1.italic=Times-Italic
+times_roman.latin1.bolditalic=Times-BoldItalic
+times_roman_bold.latin1.italic=Times-BoldItalic
+times_roman_italic.latin1.bold=Times-BoldItalic
+#
+zapfchancery_italic.latin1.plain=ZapfChancery-MediumItalic
+#
+# Finally the mappings of PS font names to indexes.
+#
+AvantGarde-Book=0
+AvantGarde-BookOblique=1
+AvantGarde-Demi=2
+AvantGarde-DemiOblique=3
+Bookman-Demi=4
+Bookman-DemiItalic=5
+Bookman-Light=6
+Bookman-LightItalic=7
+Courier=8
+Courier-Bold=9
+Courier-BoldOblique=10
+Courier-Oblique=11
+Helvetica=12
+Helvetica-Bold=13
+Helvetica-BoldOblique=14
+Helvetica-Narrow=15
+Helvetica-Narrow-Bold=16
+Helvetica-Narrow-BoldOblique=17
+Helvetica-Narrow-Oblique=18
+Helvetica-Oblique=19
+NewCenturySchlbk-Bold=20
+NewCenturySchlbk-BoldItalic=21
+NewCenturySchlbk-Italic=22
+NewCenturySchlbk-Roman=23
+Palatino-Bold=24
+Palatino-BoldItalic=25
+Palatino-Italic=26
+Palatino-Roman=27
+Symbol=28
+Times-Bold=29
+Times-BoldItalic=30
+Times-Italic=31
+Times-Roman=32
+ZapfDingbats=33
+ZapfChancery-MediumItalic=34
+#
+font.0=AvantGarde-Book ISOF
+font.1=AvantGarde-BookOblique ISOF
+font.2=AvantGarde-Demi ISOF
+font.3=AvantGarde-DemiOblique ISOF
+font.4=Bookman-Demi ISOF
+font.5=Bookman-DemiItalic ISOF
+font.6=Bookman-Light ISOF
+font.7=Bookman-LightItalic ISOF
+font.8=Courier ISOF
+font.9=Courier-Bold ISOF
+font.10=Courier-BoldOblique ISOF
+font.11=Courier-Oblique ISOF
+font.12=Helvetica ISOF
+font.13=Helvetica-Bold ISOF
+font.14=Helvetica-BoldOblique ISOF
+font.15=Helvetica-Narrow ISOF
+font.16=Helvetica-Narrow-Bold ISOF
+font.17=Helvetica-Narrow-BoldOblique ISOF
+font.18=Helvetica-Narrow-Oblique ISOF
+font.19=Helvetica-Oblique ISOF
+font.20=NewCenturySchlbk-Bold ISOF
+font.21=NewCenturySchlbk-BoldItalic ISOF
+font.22=NewCenturySchlbk-Italic ISOF
+font.23=NewCenturySchlbk-Roman ISOF
+font.24=Palatino-Bold ISOF
+font.25=Palatino-BoldItalic ISOF
+font.26=Palatino-Italic ISOF
+font.27=Palatino-Roman ISOF
+font.28=Symbol findfont
+font.29=Times-Bold ISOF
+font.30=Times-BoldItalic ISOF
+font.31=Times-Italic ISOF
+font.32=Times-Roman ISOF
+font.33=ZapfDingbats findfont
+font.34=ZapfChancery-MediumItalic ISOF
+#
diff --git a/FCL/src/main/assets/java/lib/resources.jar b/FCL/src/main/assets/java/lib/resources.jar
new file mode 100644
index 000000000..2d389f9e6
Binary files /dev/null and b/FCL/src/main/assets/java/lib/resources.jar differ
diff --git a/FCL/src/main/assets/java/lib/rt.jar b/FCL/src/main/assets/java/lib/rt.jar
new file mode 100644
index 000000000..0f071834d
Binary files /dev/null and b/FCL/src/main/assets/java/lib/rt.jar differ
diff --git a/FCL/src/main/assets/java/lib/security/blacklisted.certs b/FCL/src/main/assets/java/lib/security/blacklisted.certs
new file mode 100644
index 000000000..beded9ed5
--- /dev/null
+++ b/FCL/src/main/assets/java/lib/security/blacklisted.certs
@@ -0,0 +1,39 @@
+Algorithm=SHA-256
+03DB9E5E79FE6117177F81C11595AF598CB176AF766290DBCEB2C318B32E39A2
+08C396C006A21055D00826A5781A5CCFCE2C8D053AB3C197637A4A7A5BB9A650
+14E6D2764A4B06701C6CBC376A253775F79C782FBCB6C0EE6F99DE4BA1024ADD
+1C5E6985ACC09221DBD1A4B7BBC6D3A8C3F8540D19F20763A9537FDD42B4FFE7
+1F6BF8A3F2399AF7FD04516C2719C566CBAD51F412738F66D0457E1E6BDE6F2D
+2A464E4113141352C7962FBD1706ED4B88533EF24D7BBA6CCC5D797FD202F1C4
+31C8FD37DB9B56E708B03D1F01848B068C6DA66F36FB5D82C008C6040FA3E133
+3946901F46B0071E90D78279E82FABABCA177231A704BE72C5B0E8918566EA66
+3E11CF90719F6FB44D94EAC9A156B89BEBE7B8598F28EC58913F2BFCAF91D0C0
+423279423B9FC8CB06F1BB7C3B247522B948D5F18939F378ECC901126DE40BFB
+450F1B421BB05C8609854884559C323319619E8B06B001EA2DCBB74A23AA3BE2
+4CBBF8256BC9888A8007B2F386940A2E394378B0D903CBB3863C5A6394B889CE
+4FEE0163686ECBD65DB968E7494F55D84B25486D438E9DE558D629D28CD4D176
+535D04DFCE027C70BD5F8A9E0AD4F218E9AFDCF5BBCF9B6DE0D81E148E2E3172
+568FAF38D9F155F624838E2181B1CEB4D8459305EE652B0F810C97C3611BFE19
+585CFE6B7436CBD4E732763A2137D7F49599BA9B1790E688FCEC799C58EB84A6
+5E83124D68D24E8E177E306DF643D5EA99C5A94D6FC34B072F7544A1CABB7C7B
+71CB00749B9130FB2707A2664BFF958D0FCC8E161D9674C7450BA0FC2BEAF9D3
+76A45A496031E4DD2D7ED23E8F6FF97DBDEA980BAAC8B0BA94D7EDB551348645
+8A1BD21661C60015065212CC98B1ABB50DFD14C872A208E66BAE890F25C448AF
+9ED8F9B0E8E42A1656B8E1DD18F42BA42DC06FE52686173BA2FC70E756F207DC
+9FADCE80D62A959F9930D748488C1E22E821F4E1E4A43584B848C2FC11E04D77
+A686FEE577C88AB664D0787ECDFFF035F4806F3DE418DC9E4D516324FFF02083
+A90132CEA1D4F7185E4F688EFFD16F6AC14DFD78356A807599A5DABBEEF3333E
+B8686723E415534BC0DBD16326F9486F85B0B0799BF6639334E61DAAE67F36CD
+C0D1F42B9F4BF7ACC045B7BB5D4805E10737F67B6310CE505248D543D0D5FE07
+D0156949F1381943442C6974E9B5B49EF441BB799EF20477B90A89C3F33620CE
+D151962D954970501C60079258EBCFA38502E0A9F03CD640322B08C0A3117FE5
+D24566BF315F4E597D6E381C87119FB4198F5E9E2607F5F4AB362EF7E2E7672F
+D3A936E1A7775A45217C8296A1F22AC5631DCDEC45594099E78EEEBBEDCBA967
+D6CEAE5D9E047FAF7D797858D229AC991AD44316D1E2A37A21926D763153593A
+DF21016B00FC54F9FE3BC8B039911BB216E9162FAD2FD14D990AB96E951B49BE
+E0E740E4B0F8B3548181FF75B5372FAF4C70B99EC995D694ED0FB91B03FF8D21
+EC30C9C3065A06BB07DC5B1C6B497F370C1CA65C0F30C08E042BA6BCECC78F2C
+F5B6F88F75D391A4B1EB336F9E201239FB6B1377DB8CFA7B84736216E5AFFFD7
+FBB12938ABD86C125796EDF4162D291028890A7D6C0C1CCA75FD4B95EBFA7A1A
+FC02FD48DB92D4DCE6F11679D38354CF750CFC7F584A520EB90BDE80E241F2BD
+FDEDB5BDFCB67411513A61AEE5CB5B5D7C52AF06028EFC996CC1B05B1D6CEA2B
diff --git a/FCL/src/main/assets/java/lib/security/cacerts b/FCL/src/main/assets/java/lib/security/cacerts
new file mode 100644
index 000000000..86b4c72aa
Binary files /dev/null and b/FCL/src/main/assets/java/lib/security/cacerts differ
diff --git a/FCL/src/main/assets/java/lib/security/java.policy b/FCL/src/main/assets/java/lib/security/java.policy
new file mode 100644
index 000000000..59d99a964
--- /dev/null
+++ b/FCL/src/main/assets/java/lib/security/java.policy
@@ -0,0 +1,51 @@
+
+// Standard extensions get all permissions by default
+
+grant codeBase "file:${{java.ext.dirs}}/*" {
+ permission java.security.AllPermission;
+};
+
+// default permissions granted to all domains
+
+grant {
+ // Allows any thread to stop itself using the java.lang.Thread.stop()
+ // method that takes no argument.
+ // Note that this permission is granted by default only to remain
+ // backwards compatible.
+ // It is strongly recommended that you either remove this permission
+ // from this policy file or further restrict it to code sources
+ // that you specify, because Thread.stop() is potentially unsafe.
+ // See the API specification of java.lang.Thread.stop() for more
+ // information.
+ permission java.lang.RuntimePermission "stopThread";
+
+ // allows anyone to listen on dynamic ports
+ permission java.net.SocketPermission "localhost:0", "listen";
+
+ // "standard" properies that can be read by anyone
+
+ permission java.util.PropertyPermission "java.version", "read";
+ permission java.util.PropertyPermission "java.vendor", "read";
+ permission java.util.PropertyPermission "java.vendor.url", "read";
+ permission java.util.PropertyPermission "java.class.version", "read";
+ permission java.util.PropertyPermission "os.name", "read";
+ permission java.util.PropertyPermission "os.version", "read";
+ permission java.util.PropertyPermission "os.arch", "read";
+ permission java.util.PropertyPermission "file.separator", "read";
+ permission java.util.PropertyPermission "path.separator", "read";
+ permission java.util.PropertyPermission "line.separator", "read";
+
+ permission java.util.PropertyPermission "java.specification.version", "read";
+ permission java.util.PropertyPermission "java.specification.vendor", "read";
+ permission java.util.PropertyPermission "java.specification.name", "read";
+
+ permission java.util.PropertyPermission "java.vm.specification.version", "read";
+ permission java.util.PropertyPermission "java.vm.specification.vendor", "read";
+ permission java.util.PropertyPermission "java.vm.specification.name", "read";
+ permission java.util.PropertyPermission "java.vm.version", "read";
+ permission java.util.PropertyPermission "java.vm.vendor", "read";
+ permission java.util.PropertyPermission "java.vm.name", "read";
+
+ permission java.util.PropertyPermission "sun.security.pkcs11.disableKeyExtraction", "read";
+};
+
diff --git a/FCL/src/main/assets/java/lib/security/java.security b/FCL/src/main/assets/java/lib/security/java.security
new file mode 100644
index 000000000..87f8a313d
--- /dev/null
+++ b/FCL/src/main/assets/java/lib/security/java.security
@@ -0,0 +1,1222 @@
+#
+# This is the "master security properties file".
+#
+# An alternate java.security properties file may be specified
+# from the command line via the system property
+#
+# -Djava.security.properties=
+#
+# This properties file appends to the master security properties file.
+# If both properties files specify values for the same key, the value
+# from the command-line properties file is selected, as it is the last
+# one loaded.
+#
+# Also, if you specify
+#
+# -Djava.security.properties== (2 equals),
+#
+# then that properties file completely overrides the master security
+# properties file.
+#
+# To disable the ability to specify an additional properties file from
+# the command line, set the key security.overridePropertiesFile
+# to false in the master security properties file. It is set to true
+# by default.
+
+# In this file, various security properties are set for use by
+# java.security classes. This is where users can statically register
+# Cryptography Package Providers ("providers" for short). The term
+# "provider" refers to a package or set of packages that supply a
+# concrete implementation of a subset of the cryptography aspects of
+# the Java Security API. A provider may, for example, implement one or
+# more digital signature algorithms or message digest algorithms.
+#
+# Each provider must implement a subclass of the Provider class.
+# To register a provider in this master security properties file,
+# specify the Provider subclass name and priority in the format
+#
+# security.provider.=
+#
+# This declares a provider, and specifies its preference
+# order n. The preference order is the order in which providers are
+# searched for requested algorithms (when no specific provider is
+# requested). The order is 1-based; 1 is the most preferred, followed
+# by 2, and so on.
+#
+# must specify the subclass of the Provider class whose
+# constructor sets the values of various properties that are required
+# for the Java Security API to look up the algorithms or other
+# facilities implemented by the provider.
+#
+# There must be at least one provider specification in java.security.
+# There is a default provider that comes standard with the JDK. It
+# is called the "SUN" provider, and its Provider subclass
+# named Sun appears in the sun.security.provider package. Thus, the
+# "SUN" provider is registered via the following:
+#
+# security.provider.1=sun.security.provider.Sun
+#
+# (The number 1 is used for the default provider.)
+#
+# Note: Providers can be dynamically registered instead by calls to
+# either the addProvider or insertProviderAt method in the Security
+# class.
+
+#
+# List of providers and their preference orders (see above):
+#
+security.provider.1=sun.security.provider.Sun
+security.provider.2=sun.security.rsa.SunRsaSign
+security.provider.3=sun.security.ec.SunEC
+security.provider.4=com.sun.net.ssl.internal.ssl.Provider
+security.provider.5=com.sun.crypto.provider.SunJCE
+security.provider.6=sun.security.jgss.SunProvider
+security.provider.7=com.sun.security.sasl.Provider
+security.provider.8=org.jcp.xml.dsig.internal.dom.XMLDSigRI
+security.provider.9=sun.security.smartcardio.SunPCSC
+
+#
+# Sun Provider SecureRandom seed source.
+#
+# Select the primary source of seed data for the "SHA1PRNG" and
+# "NativePRNG" SecureRandom implementations in the "Sun" provider.
+# (Other SecureRandom implementations might also use this property.)
+#
+# On Unix-like systems (for example, Solaris/Linux/MacOS), the
+# "NativePRNG" and "SHA1PRNG" implementations obtains seed data from
+# special device files such as file:/dev/random.
+#
+# On Windows systems, specifying the URLs "file:/dev/random" or
+# "file:/dev/urandom" will enable the native Microsoft CryptoAPI seeding
+# mechanism for SHA1PRNG.
+#
+# By default, an attempt is made to use the entropy gathering device
+# specified by the "securerandom.source" Security property. If an
+# exception occurs while accessing the specified URL:
+#
+# SHA1PRNG:
+# the traditional system/thread activity algorithm will be used.
+#
+# NativePRNG:
+# a default value of /dev/random will be used. If neither
+# are available, the implementation will be disabled.
+# "file" is the only currently supported protocol type.
+#
+# The entropy gathering device can also be specified with the System
+# property "java.security.egd". For example:
+#
+# % java -Djava.security.egd=file:/dev/random MainClass
+#
+# Specifying this System property will override the
+# "securerandom.source" Security property.
+#
+# In addition, if "file:/dev/random" or "file:/dev/urandom" is
+# specified, the "NativePRNG" implementation will be more preferred than
+# SHA1PRNG in the Sun provider.
+#
+securerandom.source=file:/dev/random
+
+#
+# A list of known strong SecureRandom implementations.
+#
+# To help guide applications in selecting a suitable strong
+# java.security.SecureRandom implementation, Java distributions should
+# indicate a list of known strong implementations using the property.
+#
+# This is a comma-separated list of algorithm and/or algorithm:provider
+# entries.
+#
+securerandom.strongAlgorithms=NativePRNGBlocking:SUN
+
+#
+# Class to instantiate as the javax.security.auth.login.Configuration
+# provider.
+#
+login.configuration.provider=sun.security.provider.ConfigFile
+
+#
+# Default login configuration file
+#
+#login.config.url.1=file:${user.home}/.java.login.config
+
+#
+# Class to instantiate as the system Policy. This is the name of the class
+# that will be used as the Policy object.
+#
+policy.provider=sun.security.provider.PolicyFile
+
+# The default is to have a single system-wide policy file,
+# and a policy file in the user's home directory.
+policy.url.1=file:${java.home}/lib/security/java.policy
+policy.url.2=file:${user.home}/.java.policy
+
+# whether or not we expand properties in the policy file
+# if this is set to false, properties (${...}) will not be expanded in policy
+# files.
+policy.expandProperties=true
+
+# whether or not we allow an extra policy to be passed on the command line
+# with -Djava.security.policy=somefile. Comment out this line to disable
+# this feature.
+policy.allowSystemProperty=true
+
+# whether or not we look into the IdentityScope for trusted Identities
+# when encountering a 1.1 signed JAR file. If the identity is found
+# and is trusted, we grant it AllPermission.
+policy.ignoreIdentityScope=false
+
+#
+# Default keystore type.
+#
+keystore.type=jks
+
+#
+# Controls compatibility mode for the JKS keystore type.
+#
+# When set to 'true', the JKS keystore type supports loading
+# keystore files in either JKS or PKCS12 format. When set to 'false'
+# it supports loading only JKS keystore files.
+#
+keystore.type.compat=true
+
+#
+# List of comma-separated packages that start with or equal this string
+# will cause a security exception to be thrown when
+# passed to checkPackageAccess unless the
+# corresponding RuntimePermission ("accessClassInPackage."+package) has
+# been granted.
+package.access=sun.,\
+ com.sun.xml.internal.,\
+ com.sun.imageio.,\
+ com.sun.istack.internal.,\
+ com.sun.jmx.,\
+ com.sun.media.sound.,\
+ com.sun.naming.internal.,\
+ com.sun.proxy.,\
+ com.sun.corba.se.,\
+ com.sun.org.apache.bcel.internal.,\
+ com.sun.org.apache.regexp.internal.,\
+ com.sun.org.apache.xerces.internal.,\
+ com.sun.org.apache.xpath.internal.,\
+ com.sun.org.apache.xalan.internal.extensions.,\
+ com.sun.org.apache.xalan.internal.lib.,\
+ com.sun.org.apache.xalan.internal.res.,\
+ com.sun.org.apache.xalan.internal.templates.,\
+ com.sun.org.apache.xalan.internal.utils.,\
+ com.sun.org.apache.xalan.internal.xslt.,\
+ com.sun.org.apache.xalan.internal.xsltc.cmdline.,\
+ com.sun.org.apache.xalan.internal.xsltc.compiler.,\
+ com.sun.org.apache.xalan.internal.xsltc.trax.,\
+ com.sun.org.apache.xalan.internal.xsltc.util.,\
+ com.sun.org.apache.xml.internal.res.,\
+ com.sun.org.apache.xml.internal.resolver.helpers.,\
+ com.sun.org.apache.xml.internal.resolver.readers.,\
+ com.sun.org.apache.xml.internal.security.,\
+ com.sun.org.apache.xml.internal.serializer.utils.,\
+ com.sun.org.apache.xml.internal.utils.,\
+ com.sun.org.glassfish.,\
+ com.oracle.xmlns.internal.,\
+ com.oracle.webservices.internal.,\
+ oracle.jrockit.jfr.,\
+ org.jcp.xml.dsig.internal.,\
+ jdk.internal.,\
+ jdk.nashorn.internal.,\
+ jdk.nashorn.tools.,\
+ jdk.xml.internal.,\
+ com.sun.activation.registries.,\
+ jdk.jfr.events.,\
+ jdk.jfr.internal.,\
+ jdk.management.jfr.internal.
+
+#
+# List of comma-separated packages that start with or equal this string
+# will cause a security exception to be thrown when
+# passed to checkPackageDefinition unless the
+# corresponding RuntimePermission ("defineClassInPackage."+package) has
+# been granted.
+#
+# by default, none of the class loaders supplied with the JDK call
+# checkPackageDefinition.
+#
+package.definition=sun.,\
+ com.sun.xml.internal.,\
+ com.sun.imageio.,\
+ com.sun.istack.internal.,\
+ com.sun.jmx.,\
+ com.sun.media.sound.,\
+ com.sun.naming.internal.,\
+ com.sun.proxy.,\
+ com.sun.corba.se.,\
+ com.sun.org.apache.bcel.internal.,\
+ com.sun.org.apache.regexp.internal.,\
+ com.sun.org.apache.xerces.internal.,\
+ com.sun.org.apache.xpath.internal.,\
+ com.sun.org.apache.xalan.internal.extensions.,\
+ com.sun.org.apache.xalan.internal.lib.,\
+ com.sun.org.apache.xalan.internal.res.,\
+ com.sun.org.apache.xalan.internal.templates.,\
+ com.sun.org.apache.xalan.internal.utils.,\
+ com.sun.org.apache.xalan.internal.xslt.,\
+ com.sun.org.apache.xalan.internal.xsltc.cmdline.,\
+ com.sun.org.apache.xalan.internal.xsltc.compiler.,\
+ com.sun.org.apache.xalan.internal.xsltc.trax.,\
+ com.sun.org.apache.xalan.internal.xsltc.util.,\
+ com.sun.org.apache.xml.internal.res.,\
+ com.sun.org.apache.xml.internal.resolver.helpers.,\
+ com.sun.org.apache.xml.internal.resolver.readers.,\
+ com.sun.org.apache.xml.internal.security.,\
+ com.sun.org.apache.xml.internal.serializer.utils.,\
+ com.sun.org.apache.xml.internal.utils.,\
+ com.sun.org.glassfish.,\
+ com.oracle.xmlns.internal.,\
+ com.oracle.webservices.internal.,\
+ oracle.jrockit.jfr.,\
+ org.jcp.xml.dsig.internal.,\
+ jdk.internal.,\
+ jdk.nashorn.internal.,\
+ jdk.nashorn.tools.,\
+ jdk.xml.internal.,\
+ com.sun.activation.registries.,\
+ jdk.jfr.events.,\
+ jdk.jfr.internal.,\
+ jdk.management.jfr.internal.
+
+#
+# Determines whether this properties file can be appended to
+# or overridden on the command line via -Djava.security.properties
+#
+security.overridePropertiesFile=true
+
+#
+# Determines the default key and trust manager factory algorithms for
+# the javax.net.ssl package.
+#
+ssl.KeyManagerFactory.algorithm=SunX509
+ssl.TrustManagerFactory.algorithm=PKIX
+
+#
+# The Java-level namelookup cache policy for successful lookups:
+#
+# any negative value: caching forever
+# any positive value: the number of seconds to cache an address for
+# zero: do not cache
+#
+# default value is forever (FOREVER). For security reasons, this
+# caching is made forever when a security manager is set. When a security
+# manager is not set, the default behavior in this implementation
+# is to cache for 30 seconds.
+#
+# NOTE: setting this to anything other than the default value can have
+# serious security implications. Do not set it unless
+# you are sure you are not exposed to DNS spoofing attack.
+#
+#networkaddress.cache.ttl=-1
+
+# The Java-level namelookup cache policy for failed lookups:
+#
+# any negative value: cache forever
+# any positive value: the number of seconds to cache negative lookup results
+# zero: do not cache
+#
+# In some Microsoft Windows networking environments that employ
+# the WINS name service in addition to DNS, name service lookups
+# that fail may take a noticeably long time to return (approx. 5 seconds).
+# For this reason the default caching policy is to maintain these
+# results for 10 seconds.
+#
+#
+networkaddress.cache.negative.ttl=10
+
+#
+# Properties to configure OCSP for certificate revocation checking
+#
+
+# Enable OCSP
+#
+# By default, OCSP is not used for certificate revocation checking.
+# This property enables the use of OCSP when set to the value "true".
+#
+# NOTE: SocketPermission is required to connect to an OCSP responder.
+#
+# Example,
+# ocsp.enable=true
+
+#
+# Location of the OCSP responder
+#
+# By default, the location of the OCSP responder is determined implicitly
+# from the certificate being validated. This property explicitly specifies
+# the location of the OCSP responder. The property is used when the
+# Authority Information Access extension (defined in RFC 5280) is absent
+# from the certificate or when it requires overriding.
+#
+# Example,
+# ocsp.responderURL=http://ocsp.example.net:80
+
+#
+# Subject name of the OCSP responder's certificate
+#
+# By default, the certificate of the OCSP responder is that of the issuer
+# of the certificate being validated. This property identifies the certificate
+# of the OCSP responder when the default does not apply. Its value is a string
+# distinguished name (defined in RFC 2253) which identifies a certificate in
+# the set of certificates supplied during cert path validation. In cases where
+# the subject name alone is not sufficient to uniquely identify the certificate
+# then both the "ocsp.responderCertIssuerName" and
+# "ocsp.responderCertSerialNumber" properties must be used instead. When this
+# property is set then those two properties are ignored.
+#
+# Example,
+# ocsp.responderCertSubjectName="CN=OCSP Responder, O=XYZ Corp"
+
+#
+# Issuer name of the OCSP responder's certificate
+#
+# By default, the certificate of the OCSP responder is that of the issuer
+# of the certificate being validated. This property identifies the certificate
+# of the OCSP responder when the default does not apply. Its value is a string
+# distinguished name (defined in RFC 2253) which identifies a certificate in
+# the set of certificates supplied during cert path validation. When this
+# property is set then the "ocsp.responderCertSerialNumber" property must also
+# be set. When the "ocsp.responderCertSubjectName" property is set then this
+# property is ignored.
+#
+# Example,
+# ocsp.responderCertIssuerName="CN=Enterprise CA, O=XYZ Corp"
+
+#
+# Serial number of the OCSP responder's certificate
+#
+# By default, the certificate of the OCSP responder is that of the issuer
+# of the certificate being validated. This property identifies the certificate
+# of the OCSP responder when the default does not apply. Its value is a string
+# of hexadecimal digits (colon or space separators may be present) which
+# identifies a certificate in the set of certificates supplied during cert path
+# validation. When this property is set then the "ocsp.responderCertIssuerName"
+# property must also be set. When the "ocsp.responderCertSubjectName" property
+# is set then this property is ignored.
+#
+# Example,
+# ocsp.responderCertSerialNumber=2A:FF:00
+
+#
+# Policy for failed Kerberos KDC lookups:
+#
+# When a KDC is unavailable (network error, service failure, etc), it is
+# put inside a blacklist and accessed less often for future requests. The
+# value (case-insensitive) for this policy can be:
+#
+# tryLast
+# KDCs in the blacklist are always tried after those not on the list.
+#
+# tryLess[:max_retries,timeout]
+# KDCs in the blacklist are still tried by their order in the configuration,
+# but with smaller max_retries and timeout values. max_retries and timeout
+# are optional numerical parameters (default 1 and 5000, which means once
+# and 5 seconds). Please notes that if any of the values defined here is
+# more than what is defined in krb5.conf, it will be ignored.
+#
+# Whenever a KDC is detected as available, it is removed from the blacklist.
+# The blacklist is reset when krb5.conf is reloaded. You can add
+# refreshKrb5Config=true to a JAAS configuration file so that krb5.conf is
+# reloaded whenever a JAAS authentication is attempted.
+#
+# Example,
+# krb5.kdc.bad.policy = tryLast
+# krb5.kdc.bad.policy = tryLess:2,2000
+krb5.kdc.bad.policy = tryLast
+
+#
+# Kerberos cross-realm referrals (RFC 6806)
+#
+# OpenJDK's Kerberos client supports cross-realm referrals as defined in
+# RFC 6806. This allows to setup more dynamic environments in which clients
+# do not need to know in advance how to reach the realm of a target principal
+# (either a user or service).
+#
+# When a client issues an AS or a TGS request, the "canonicalize" option
+# is set to announce support of this feature. A KDC server may fulfill the
+# request or reply referring the client to a different one. If referred,
+# the client will issue a new request and the cycle repeats.
+#
+# In addition to referrals, the "canonicalize" option allows the KDC server
+# to change the client name in response to an AS request. For security reasons,
+# RFC 6806 (section 11) FAST scheme is enforced.
+#
+# Disable Kerberos cross-realm referrals. Value may be overwritten with a
+# System property (-Dsun.security.krb5.disableReferrals).
+sun.security.krb5.disableReferrals=false
+
+# Maximum number of AS or TGS referrals to avoid infinite loops. Value may
+# be overwritten with a System property (-Dsun.security.krb5.maxReferrals).
+sun.security.krb5.maxReferrals=5
+
+#
+# This property contains a list of disabled EC Named Curves that can be included
+# in the jdk.[tls|certpath|jar].disabledAlgorithms properties. To include this
+# list in any of the disabledAlgorithms properties, add the property name as
+# an entry.
+jdk.disabled.namedCurves = secp112r1, secp112r2, secp128r1, secp128r2, \
+ secp160k1, secp160r1, secp160r2, secp192k1, secp192r1, secp224k1, \
+ secp224r1, secp256k1, sect113r1, sect113r2, sect131r1, sect131r2, \
+ sect163k1, sect163r1, sect163r2, sect193r1, sect193r2, sect233k1, \
+ sect233r1, sect239k1, sect283k1, sect283r1, sect409k1, sect409r1, \
+ sect571k1, sect571r1, X9.62 c2tnb191v1, X9.62 c2tnb191v2, \
+ X9.62 c2tnb191v3, X9.62 c2tnb239v1, X9.62 c2tnb239v2, X9.62 c2tnb239v3, \
+ X9.62 c2tnb359v1, X9.62 c2tnb431r1, X9.62 prime192v2, X9.62 prime192v3, \
+ X9.62 prime239v1, X9.62 prime239v2, X9.62 prime239v3, brainpoolP256r1, \
+ brainpoolP320r1, brainpoolP384r1, brainpoolP512r1
+
+#
+# Algorithm restrictions for certification path (CertPath) processing
+#
+# In some environments, certain algorithms or key lengths may be undesirable
+# for certification path building and validation. For example, "MD2" is
+# generally no longer considered to be a secure hash algorithm. This section
+# describes the mechanism for disabling algorithms based on algorithm name
+# and/or key length. This includes algorithms used in certificates, as well
+# as revocation information such as CRLs and signed OCSP Responses.
+# The syntax of the disabled algorithm string is described as follows:
+# DisabledAlgorithms:
+# " DisabledAlgorithm { , DisabledAlgorithm } "
+#
+# DisabledAlgorithm:
+# AlgorithmName [Constraint] { '&' Constraint } | IncludeProperty
+#
+# AlgorithmName:
+# (see below)
+#
+# Constraint:
+# KeySizeConstraint | CAConstraint | DenyAfterConstraint |
+# UsageConstraint
+#
+# KeySizeConstraint:
+# keySize Operator KeyLength
+#
+# Operator:
+# <= | < | == | != | >= | >
+#
+# KeyLength:
+# Integer value of the algorithm's key length in bits
+#
+# CAConstraint:
+# jdkCA
+#
+# DenyAfterConstraint:
+# denyAfter YYYY-MM-DD
+#
+# UsageConstraint:
+# usage [TLSServer] [TLSClient] [SignedJAR]
+#
+# IncludeProperty:
+# include
+#
+# The "AlgorithmName" is the standard algorithm name of the disabled
+# algorithm. See "Java Cryptography Architecture Standard Algorithm Name
+# Documentation" for information about Standard Algorithm Names. Matching
+# is performed using a case-insensitive sub-element matching rule. (For
+# example, in "SHA1withECDSA" the sub-elements are "SHA1" for hashing and
+# "ECDSA" for signatures.) If the assertion "AlgorithmName" is a
+# sub-element of the certificate algorithm name, the algorithm will be
+# rejected during certification path building and validation. For example,
+# the assertion algorithm name "DSA" will disable all certificate algorithms
+# that rely on DSA, such as NONEwithDSA, SHA1withDSA. However, the assertion
+# will not disable algorithms related to "ECDSA".
+#
+# The "IncludeProperty" allows a implementation-defined security property that
+# can be included in the disabledAlgorithms properties. These properties are
+# to help manage common actions easier across multiple disabledAlgorithm
+# properties.
+# There is one defined security property: jdk.disabled.NamedCurves
+# See the property for more specific details.
+#
+#
+# A "Constraint" defines restrictions on the keys and/or certificates for
+# a specified AlgorithmName:
+#
+# KeySizeConstraint:
+# keySize Operator KeyLength
+# The constraint requires a key of a valid size range if the
+# "AlgorithmName" is of a key algorithm. The "KeyLength" indicates
+# the key size specified in number of bits. For example,
+# "RSA keySize <= 1024" indicates that any RSA key with key size less
+# than or equal to 1024 bits should be disabled, and
+# "RSA keySize < 1024, RSA keySize > 2048" indicates that any RSA key
+# with key size less than 1024 or greater than 2048 should be disabled.
+# This constraint is only used on algorithms that have a key size.
+#
+# CAConstraint:
+# jdkCA
+# This constraint prohibits the specified algorithm only if the
+# algorithm is used in a certificate chain that terminates at a marked
+# trust anchor in the lib/security/cacerts keystore. If the jdkCA
+# constraint is not set, then all chains using the specified algorithm
+# are restricted. jdkCA may only be used once in a DisabledAlgorithm
+# expression.
+# Example: To apply this constraint to SHA-1 certificates, include
+# the following: "SHA1 jdkCA"
+#
+# DenyAfterConstraint:
+# denyAfter YYYY-MM-DD
+# This constraint prohibits a certificate with the specified algorithm
+# from being used after the date regardless of the certificate's
+# validity. JAR files that are signed and timestamped before the
+# constraint date with certificates containing the disabled algorithm
+# will not be restricted. The date is processed in the UTC timezone.
+# This constraint can only be used once in a DisabledAlgorithm
+# expression.
+# Example: To deny usage of RSA 2048 bit certificates after Feb 3 2020,
+# use the following: "RSA keySize == 2048 & denyAfter 2020-02-03"
+#
+# UsageConstraint:
+# usage [TLSServer] [TLSClient] [SignedJAR]
+# This constraint prohibits the specified algorithm for
+# a specified usage. This should be used when disabling an algorithm
+# for all usages is not practical. 'TLSServer' restricts the algorithm
+# in TLS server certificate chains when server authentication is
+# performed. 'TLSClient' restricts the algorithm in TLS client
+# certificate chains when client authentication is performed.
+# 'SignedJAR' constrains use of certificates in signed jar files.
+# The usage type follows the keyword and more than one usage type can
+# be specified with a whitespace delimiter.
+# Example: "SHA1 usage TLSServer TLSClient"
+#
+# When an algorithm must satisfy more than one constraint, it must be
+# delimited by an ampersand '&'. For example, to restrict certificates in a
+# chain that terminate at a distribution provided trust anchor and contain
+# RSA keys that are less than or equal to 1024 bits, add the following
+# constraint: "RSA keySize <= 1024 & jdkCA".
+#
+# All DisabledAlgorithms expressions are processed in the order defined in the
+# property. This requires lower keysize constraints to be specified
+# before larger keysize constraints of the same algorithm. For example:
+# "RSA keySize < 1024 & jdkCA, RSA keySize < 2048".
+#
+# Note: The algorithm restrictions do not apply to trust anchors or
+# self-signed certificates.
+#
+# Note: This property is currently used by Oracle's PKIX implementation. It
+# is not guaranteed to be examined and used by other implementations.
+#
+# Example:
+# jdk.certpath.disabledAlgorithms=MD2, DSA, RSA keySize < 2048
+#
+#
+jdk.certpath.disabledAlgorithms=MD2, MD5, SHA1 jdkCA & usage TLSServer, \
+ RSA keySize < 1024, DSA keySize < 1024, EC keySize < 224, \
+ include jdk.disabled.namedCurves
+
+#
+# Legacy algorithms for certification path (CertPath) processing and
+# signed JAR files.
+#
+# In some environments, a certain algorithm or key length may be undesirable
+# but is not yet disabled.
+#
+# Tools such as keytool and jarsigner may emit warnings when these legacy
+# algorithms are used. See the man pages for those tools for more information.
+#
+# The syntax is the same as the "jdk.certpath.disabledAlgorithms" and
+# "jdk.jar.disabledAlgorithms" security properties.
+#
+# Note: This property is currently used by the JDK Reference
+# implementation. It is not guaranteed to be examined and used by other
+# implementations.
+
+jdk.security.legacyAlgorithms=SHA1, \
+ RSA keySize < 2048, DSA keySize < 2048
+
+#
+# Algorithm restrictions for signed JAR files
+#
+# In some environments, certain algorithms or key lengths may be undesirable
+# for signed JAR validation. For example, "MD2" is generally no longer
+# considered to be a secure hash algorithm. This section describes the
+# mechanism for disabling algorithms based on algorithm name and/or key length.
+# JARs signed with any of the disabled algorithms or key sizes will be treated
+# as unsigned.
+#
+# The syntax of the disabled algorithm string is described as follows:
+# DisabledAlgorithms:
+# " DisabledAlgorithm { , DisabledAlgorithm } "
+#
+# DisabledAlgorithm:
+# AlgorithmName [Constraint] { '&' Constraint }
+#
+# AlgorithmName:
+# (see below)
+#
+# Constraint:
+# KeySizeConstraint | DenyAfterConstraint
+#
+# KeySizeConstraint:
+# keySize Operator KeyLength
+#
+# DenyAfterConstraint:
+# denyAfter YYYY-MM-DD
+#
+# Operator:
+# <= | < | == | != | >= | >
+#
+# KeyLength:
+# Integer value of the algorithm's key length in bits
+#
+# Note: This property is currently used by the JDK Reference
+# implementation. It is not guaranteed to be examined and used by other
+# implementations.
+#
+# See "jdk.certpath.disabledAlgorithms" for syntax descriptions.
+#
+jdk.jar.disabledAlgorithms=MD2, MD5, RSA keySize < 1024, \
+ DSA keySize < 1024, include jdk.disabled.namedCurves
+
+#
+# Algorithm restrictions for Secure Socket Layer/Transport Layer Security
+# (SSL/TLS) processing
+#
+# In some environments, certain algorithms or key lengths may be undesirable
+# when using SSL/TLS. This section describes the mechanism for disabling
+# algorithms during SSL/TLS security parameters negotiation, including
+# protocol version negotiation, cipher suites selection, peer authentication
+# and key exchange mechanisms.
+#
+# Disabled algorithms will not be negotiated for SSL/TLS connections, even
+# if they are enabled explicitly in an application.
+#
+# For PKI-based peer authentication and key exchange mechanisms, this list
+# of disabled algorithms will also be checked during certification path
+# building and validation, including algorithms used in certificates, as
+# well as revocation information such as CRLs and signed OCSP Responses.
+# This is in addition to the jdk.certpath.disabledAlgorithms property above.
+#
+# See the specification of "jdk.certpath.disabledAlgorithms" for the
+# syntax of the disabled algorithm string.
+#
+# Note: The algorithm restrictions do not apply to trust anchors or
+# self-signed certificates.
+#
+# Note: This property is currently used by the JDK Reference implementation.
+# It is not guaranteed to be examined and used by other implementations.
+#
+# Example:
+# jdk.tls.disabledAlgorithms=MD5, SSLv3, DSA, RSA keySize < 2048
+jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, \
+ DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, \
+ include jdk.disabled.namedCurves
+
+# Legacy algorithms for Secure Socket Layer/Transport Layer Security (SSL/TLS)
+# processing in JSSE implementation.
+#
+# In some environments, a certain algorithm may be undesirable but it
+# cannot be disabled because of its use in legacy applications. Legacy
+# algorithms may still be supported, but applications should not use them
+# as the security strength of legacy algorithms are usually not strong enough
+# in practice.
+#
+# During SSL/TLS security parameters negotiation, legacy algorithms will
+# not be negotiated unless there are no other candidates.
+#
+# The syntax of the legacy algorithms string is described as this Java
+# BNF-style:
+# LegacyAlgorithms:
+# " LegacyAlgorithm { , LegacyAlgorithm } "
+#
+# LegacyAlgorithm:
+# AlgorithmName (standard JSSE algorithm name)
+#
+# See the specification of security property "jdk.certpath.disabledAlgorithms"
+# for the syntax and description of the "AlgorithmName" notation.
+#
+# Per SSL/TLS specifications, cipher suites have the form:
+# SSL_KeyExchangeAlg_WITH_CipherAlg_MacAlg
+# or
+# TLS_KeyExchangeAlg_WITH_CipherAlg_MacAlg
+#
+# For example, the cipher suite TLS_RSA_WITH_AES_128_CBC_SHA uses RSA as the
+# key exchange algorithm, AES_128_CBC (128 bits AES cipher algorithm in CBC
+# mode) as the cipher (encryption) algorithm, and SHA-1 as the message digest
+# algorithm for HMAC.
+#
+# The LegacyAlgorithm can be one of the following standard algorithm names:
+# 1. JSSE cipher suite name, e.g., TLS_RSA_WITH_AES_128_CBC_SHA
+# 2. JSSE key exchange algorithm name, e.g., RSA
+# 3. JSSE cipher (encryption) algorithm name, e.g., AES_128_CBC
+# 4. JSSE message digest algorithm name, e.g., SHA
+#
+# See SSL/TLS specifications and "Java Cryptography Architecture Standard
+# Algorithm Name Documentation" for information about the algorithm names.
+#
+# Note: This property is currently used by the JDK Reference implementation.
+# It is not guaranteed to be examined and used by other implementations.
+# There is no guarantee the property will continue to exist or be of the
+# same syntax in future releases.
+#
+# Example:
+# jdk.tls.legacyAlgorithms=DH_anon, DES_CBC, SSL_RSA_WITH_RC4_128_MD5
+#
+jdk.tls.legacyAlgorithms= \
+ K_NULL, C_NULL, M_NULL, \
+ DH_anon, ECDH_anon, \
+ RC4_128, RC4_40, DES_CBC, DES40_CBC, \
+ 3DES_EDE_CBC
+
+# The pre-defined default finite field Diffie-Hellman ephemeral (DHE)
+# parameters for Transport Layer Security (SSL/TLS/DTLS) processing.
+#
+# In traditional SSL/TLS/DTLS connections where finite field DHE parameters
+# negotiation mechanism is not used, the server offers the client group
+# parameters, base generator g and prime modulus p, for DHE key exchange.
+# It is recommended to use dynamic group parameters. This property defines
+# a mechanism that allows you to specify custom group parameters.
+#
+# The syntax of this property string is described as this Java BNF-style:
+# DefaultDHEParameters:
+# DefinedDHEParameters { , DefinedDHEParameters }
+#
+# DefinedDHEParameters:
+# "{" DHEPrimeModulus , DHEBaseGenerator "}"
+#
+# DHEPrimeModulus:
+# HexadecimalDigits
+#
+# DHEBaseGenerator:
+# HexadecimalDigits
+#
+# HexadecimalDigits:
+# HexadecimalDigit { HexadecimalDigit }
+#
+# HexadecimalDigit: one of
+# 0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f
+#
+# Whitespace characters are ignored.
+#
+# The "DefinedDHEParameters" defines the custom group parameters, prime
+# modulus p and base generator g, for a particular size of prime modulus p.
+# The "DHEPrimeModulus" defines the hexadecimal prime modulus p, and the
+# "DHEBaseGenerator" defines the hexadecimal base generator g of a group
+# parameter. It is recommended to use safe primes for the custom group
+# parameters.
+#
+# If this property is not defined or the value is empty, the underlying JSSE
+# provider's default group parameter is used for each connection.
+#
+# If the property value does not follow the grammar, or a particular group
+# parameter is not valid, the connection will fall back and use the
+# underlying JSSE provider's default group parameter.
+#
+# Note: This property is currently used by OpenJDK's JSSE implementation. It
+# is not guaranteed to be examined and used by other implementations.
+#
+# Example:
+# jdk.tls.server.defaultDHEParameters=
+# { \
+# FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1 \
+# 29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD \
+# EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245 \
+# E485B576 625E7EC6 F44C42E9 A637ED6B 0BFF5CB6 F406B7ED \
+# EE386BFB 5A899FA5 AE9F2411 7C4B1FE6 49286651 ECE65381 \
+# FFFFFFFF FFFFFFFF, 2}
+
+#
+# TLS key limits on symmetric cryptographic algorithms
+#
+# This security property sets limits on algorithms key usage in TLS 1.3.
+# When the amount of data encrypted exceeds the algorithm value listed below,
+# a KeyUpdate message will trigger a key change. This is for symmetric ciphers
+# with TLS 1.3 only.
+#
+# The syntax for the property is described below:
+# KeyLimits:
+# " KeyLimit { , KeyLimit } "
+#
+# WeakKeyLimit:
+# AlgorithmName Action Length
+#
+# AlgorithmName:
+# A full algorithm transformation.
+#
+# Action:
+# KeyUpdate
+#
+# Length:
+# The amount of encrypted data in a session before the Action occurs
+# This value may be an integer value in bytes, or as a power of two, 2^29.
+#
+# KeyUpdate:
+# The TLS 1.3 KeyUpdate handshake process begins when the Length amount
+# is fulfilled.
+#
+# Note: This property is currently used by OpenJDK's JSSE implementation. It
+# is not guaranteed to be examined and used by other implementations.
+#
+jdk.tls.keyLimits=AES/GCM/NoPadding KeyUpdate 2^37
+
+# Cryptographic Jurisdiction Policy defaults
+#
+# Import and export control rules on cryptographic software vary from
+# country to country. By default, the JDK provides two different sets of
+# cryptographic policy files:
+#
+# unlimited: These policy files contain no restrictions on cryptographic
+# strengths or algorithms.
+#
+# limited: These policy files contain more restricted cryptographic
+# strengths, and are still available if your country or
+# usage requires the traditional restrictive policy.
+#
+# The JDK JCE framework uses the unlimited policy files by default.
+# However the user may explicitly choose a set either by defining the
+# "crypto.policy" Security property or by installing valid JCE policy
+# jar files into the traditional JDK installation location. To better
+# support older JDK Update releases, the "crypto.policy" property is not
+# defined by default. See below for more information.
+#
+# The following logic determines which policy files are used:
+#
+# refers to the directory where the JRE was
+# installed and may be determined using the "java.home"
+# System property.
+#
+# 1. If the Security property "crypto.policy" has been defined,
+# then the following mechanism is used:
+#
+# The policy files are stored as jar files in subdirectories of
+# /lib/security/policy. Each directory contains a complete
+# set of policy files.
+#
+# The "crypto.policy" Security property controls the directory
+# selection, and thus the effective cryptographic policy.
+#
+# The default set of directories is:
+#
+# limited | unlimited
+#
+# 2. If the "crypto.policy" property is not set and the traditional
+# US_export_policy.jar and local_policy.jar files
+# (e.g. limited/unlimited) are found in the legacy
+# /lib/security directory, then the rules embedded within
+# those jar files will be used. This helps preserve compatibility
+# for users upgrading from an older installation.
+#
+# 3. If the jar files are not present in the legacy location
+# and the "crypto.policy" Security property is not defined,
+# then the JDK will use the unlimited settings (equivalent to
+# crypto.policy=unlimited)
+#
+# Please see the JCA documentation for additional information on these
+# files and formats.
+#
+# YOU ARE ADVISED TO CONSULT YOUR EXPORT/IMPORT CONTROL COUNSEL OR ATTORNEY
+# TO DETERMINE THE EXACT REQUIREMENTS.
+#
+# Please note that the JCE for Java SE, including the JCE framework,
+# cryptographic policy files, and standard JCE providers provided with
+# the Java SE, have been reviewed and approved for export as mass market
+# encryption item by the US Bureau of Industry and Security.
+#
+# Note: This property is currently used by the JDK Reference implementation.
+# It is not guaranteed to be examined and used by other implementations.
+#
+#crypto.policy=unlimited
+
+#
+# The policy for the XML Signature secure validation mode. The mode is
+# enabled by setting the property "org.jcp.xml.dsig.secureValidation" to
+# true with the javax.xml.crypto.XMLCryptoContext.setProperty() method,
+# or by running the code with a SecurityManager.
+#
+# Policy:
+# Constraint {"," Constraint }
+# Constraint:
+# AlgConstraint | MaxTransformsConstraint | MaxReferencesConstraint |
+# ReferenceUriSchemeConstraint | KeySizeConstraint | OtherConstraint
+# AlgConstraint
+# "disallowAlg" Uri
+# MaxTransformsConstraint:
+# "maxTransforms" Integer
+# MaxReferencesConstraint:
+# "maxReferences" Integer
+# ReferenceUriSchemeConstraint:
+# "disallowReferenceUriSchemes" String { String }
+# KeySizeConstraint:
+# "minKeySize" KeyAlg Integer
+# OtherConstraint:
+# "noDuplicateIds" | "noRetrievalMethodLoops"
+#
+# For AlgConstraint, Uri is the algorithm URI String that is not allowed.
+# See the XML Signature Recommendation for more information on algorithm
+# URI Identifiers. For KeySizeConstraint, KeyAlg is the standard algorithm
+# name of the key type (ex: "RSA"). If the MaxTransformsConstraint,
+# MaxReferencesConstraint or KeySizeConstraint (for the same key type) is
+# specified more than once, only the last entry is enforced.
+#
+# Note: This property is currently used by the JDK Reference implementation. It
+# is not guaranteed to be examined and used by other implementations.
+#
+jdk.xml.dsig.secureValidationPolicy=\
+ disallowAlg http://www.w3.org/TR/1999/REC-xslt-19991116,\
+ disallowAlg http://www.w3.org/2001/04/xmldsig-more#rsa-md5,\
+ disallowAlg http://www.w3.org/2001/04/xmldsig-more#hmac-md5,\
+ disallowAlg http://www.w3.org/2001/04/xmldsig-more#md5,\
+ maxTransforms 5,\
+ maxReferences 30,\
+ disallowReferenceUriSchemes file http https,\
+ minKeySize RSA 1024,\
+ minKeySize DSA 1024,\
+ minKeySize EC 224,\
+ noDuplicateIds,\
+ noRetrievalMethodLoops
+
+#
+# Serialization process-wide filter
+#
+# A filter, if configured, is used by java.io.ObjectInputStream during
+# deserialization to check the contents of the stream.
+# A filter is configured as a sequence of patterns, each pattern is either
+# matched against the name of a class in the stream or defines a limit.
+# Patterns are separated by ";" (semicolon).
+# Whitespace is significant and is considered part of the pattern.
+#
+# If the system property jdk.serialFilter is also specified on the command
+# line, it supersedes the security property value defined here.
+#
+# If a pattern includes a "=", it sets a limit.
+# If a limit appears more than once the last value is used.
+# Limits are checked before classes regardless of the order in the sequence of patterns.
+# If any of the limits are exceeded, the filter status is REJECTED.
+#
+# maxdepth=value - the maximum depth of a graph
+# maxrefs=value - the maximum number of internal references
+# maxbytes=value - the maximum number of bytes in the input stream
+# maxarray=value - the maximum array length allowed
+#
+# Other patterns, from left to right, match the class or package name as
+# returned from Class.getName.
+# If the class is an array type, the class or package to be matched is the element type.
+# Arrays of any number of dimensions are treated the same as the element type.
+# For example, a pattern of "!example.Foo", rejects creation of any instance or
+# array of example.Foo.
+#
+# If the pattern starts with "!", the status is REJECTED if the remaining pattern
+# is matched; otherwise the status is ALLOWED if the pattern matches.
+# If the pattern ends with ".**" it matches any class in the package and all subpackages.
+# If the pattern ends with ".*" it matches any class in the package.
+# If the pattern ends with "*", it matches any class with the pattern as a prefix.
+# If the pattern is equal to the class name, it matches.
+# Otherwise, the status is UNDECIDED.
+#
+# Primitive types are not configurable with this filter.
+#
+#jdk.serialFilter=pattern;pattern
+
+#
+# RMI Registry Serial Filter
+#
+# The filter pattern uses the same format as jdk.serialFilter.
+# This filter can override the builtin filter if additional types need to be
+# allowed or rejected from the RMI Registry or to decrease limits but not
+# to increase limits.
+# If the limits (maxdepth, maxrefs, or maxbytes) are exceeded, the object is rejected.
+#
+# The maxdepth of any array passed to the RMI Registry is set to
+# 10000. The maximum depth of the graph is set to 20.
+# These limits can be reduced via the maxarray, maxdepth limits.
+#
+#sun.rmi.registry.registryFilter=pattern;pattern
+
+#
+# Array construction of any component type, including subarrays and arrays of
+# primitives, are allowed unless the length is greater than the maxarray limit.
+# The filter is applied to each array element.
+#
+# The built-in filter allows subclasses of allowed classes and
+# can approximately be represented as the pattern:
+#
+#sun.rmi.registry.registryFilter=\
+# maxarray=1000000;\
+# maxdepth=20;\
+# java.lang.String;\
+# java.lang.Number;\
+# java.lang.reflect.Proxy;\
+# java.rmi.Remote;\
+# sun.rmi.server.UnicastRef;\
+# sun.rmi.server.RMIClientSocketFactory;\
+# sun.rmi.server.RMIServerSocketFactory;\
+# java.rmi.activation.ActivationID;\
+# java.rmi.server.UID
+#
+# RMI Distributed Garbage Collector (DGC) Serial Filter
+#
+# The filter pattern uses the same format as jdk.serialFilter.
+# This filter can override the builtin filter if additional types need to be
+# allowed or rejected from the RMI DGC.
+#
+# The builtin DGC filter can approximately be represented as the filter pattern:
+#
+#sun.rmi.transport.dgcFilter=\
+# java.rmi.server.ObjID;\
+# java.rmi.server.UID;\
+# java.rmi.dgc.VMID;\
+# java.rmi.dgc.Lease;\
+# maxdepth=5;maxarray=10000
+
+# CORBA ORBIorTypeCheckRegistryFilter
+# Type check enhancement for ORB::string_to_object processing
+#
+# An IOR type check filter, if configured, is used by an ORB during
+# an ORB::string_to_object invocation to check the veracity of the type encoded
+# in the ior string.
+#
+# The filter pattern consists of a semi-colon separated list of class names.
+# The configured list contains the binary class names of the IDL interface types
+# corresponding to the IDL stub class to be instantiated.
+# As such, a filter specifies a list of IDL stub classes that will be
+# allowed by an ORB when an ORB::string_to_object is invoked.
+# It is used to specify a white list configuration of acceptable
+# IDL stub types which may be contained in a stringified IOR
+# parameter passed as input to an ORB::string_to_object method.
+#
+# Note: This property is currently used by the JDK Reference implementation.
+# It is not guaranteed to be examined and used by other implementations.
+#
+#com.sun.CORBA.ORBIorTypeCheckRegistryFilter=binary_class_name;binary_class_name
+
+#
+# JCEKS Encrypted Key Serial Filter
+#
+# This filter, if configured, is used by the JCEKS KeyStore during the
+# deserialization of the encrypted Key object stored inside a key entry.
+# If not configured or the filter result is UNDECIDED (i.e. none of the patterns
+# matches), the filter configured by jdk.serialFilter will be consulted.
+#
+# If the system property jceks.key.serialFilter is also specified, it supersedes
+# the security property value defined here.
+#
+# The filter pattern uses the same format as jdk.serialFilter. The default
+# pattern allows java.lang.Enum, java.security.KeyRep, java.security.KeyRep$Type,
+# and javax.crypto.spec.SecretKeySpec and rejects all the others.
+jceks.key.serialFilter = java.lang.Enum;java.security.KeyRep;\
+ java.security.KeyRep$Type;javax.crypto.spec.SecretKeySpec;!*
+
+# The iteration count used for password-based encryption (PBE) in JCEKS
+# keystores. Values in the range 10000 to 5000000 are considered valid.
+# If the value is out of this range, or is not a number, or is unspecified;
+# a default of 200000 is used.
+#
+# If the system property jdk.jceks.iterationCount is also specified, it
+# supersedes the security property value defined here.
+#
+#jdk.jceks.iterationCount = 200000
+
+#
+# Disabled mechanisms for the Simple Authentication and Security Layer (SASL)
+#
+# Disabled mechanisms will not be negotiated by both SASL clients and servers.
+# These mechanisms will be ignored if they are specified in the "mechanisms"
+# argument of "Sasl.createSaslClient" or the "mechanism" argument of
+# "Sasl.createSaslServer".
+#
+# The value of this property is a comma-separated list of SASL mechanisms.
+# The mechanisms are case-sensitive. Whitespaces around the commas are ignored.
+#
+# Note: This property is currently used by the JDK Reference implementation.
+# It is not guaranteed to be examined and used by other implementations.
+#
+# Example:
+# jdk.sasl.disabledMechanisms=PLAIN, CRAM-MD5, DIGEST-MD5
+jdk.sasl.disabledMechanisms=
+
+#
+# Policies for distrusting Certificate Authorities (CAs).
+#
+# This is a comma separated value of one or more case-sensitive strings, each
+# of which represents a policy for determining if a CA should be distrusted.
+# The supported values are:
+#
+#
+# SYMANTEC_TLS : Distrust TLS Server certificates anchored by a Symantec
+# root CA and issued after April 16, 2019 unless issued by one of the
+# following subordinate CAs which have a later distrust date:
+# 1. Apple IST CA 2 - G1, SHA-256 fingerprint:
+# AC2B922ECFD5E01711772FEA8ED372DE9D1E2245FCE3F57A9CDBEC77296A424B
+# Distrust after December 31, 2019.
+# 2. Apple IST CA 8 - G1, SHA-256 fingerprint:
+# A4FE7C7F15155F3F0AEF7AAA83CF6E06DEB97CA3F909DF920AC1490882D488ED
+# Distrust after December 31, 2019.
+# Leading and trailing whitespace surrounding each value are ignored.
+# Unknown values are ignored. If the property is commented out or set to the
+# empty String, no policies are enforced.
+#
+# Note: This property is currently used by the JDK Reference implementation.
+# It is not guaranteed to be supported by other SE implementations. Also, this
+# property does not override other security properties which can restrict
+# certificates such as jdk.tls.disabledAlgorithms or
+# jdk.certpath.disabledAlgorithms; those restrictions are still enforced even
+# if this property is not enabled.
+#
+jdk.security.caDistrustPolicies=SYMANTEC_TLS
+
+#
+# Policies for the proxy_impersonator Kerberos ccache configuration entry
+#
+# The proxy_impersonator ccache configuration entry indicates that the ccache
+# is a synthetic delegated credential for use with S4U2Proxy by an intermediate
+# server. The ccache file should also contain the TGT of this server and
+# an evidence ticket from the default principal of the ccache to this server.
+#
+# This security property determines how Java uses this configuration entry.
+# There are 3 possible values:
+#
+# no-impersonate - Ignore this configuration entry, and always act as
+# the owner of the TGT (if it exists).
+#
+# try-impersonate - Try impersonation when this configuration entry exists.
+# If no matching TGT or evidence ticket is found,
+# fallback to no-impersonate.
+#
+# always-impersonate - Always impersonate when this configuration entry exists.
+# If no matching TGT or evidence ticket is found,
+# no initial credential is read from the ccache.
+#
+# The default value is "always-impersonate".
+#
+# If a system property of the same name is also specified, it supersedes the
+# security property value defined here.
+#
+#jdk.security.krb5.default.initiate.credential=always-impersonate
+
+#
+# Trust Anchor Certificates - CA Basic Constraint check
+#
+# X.509 v3 certificates used as Trust Anchors (to validate signed code or TLS
+# connections) must have the cA Basic Constraint field set to 'true'. Also, if
+# they include a Key Usage extension, the keyCertSign bit must be set. These
+# checks, enabled by default, can be disabled for backward-compatibility
+# purposes with the jdk.security.allowNonCaAnchor System and Security
+# properties. In the case that both properties are simultaneously set, the
+# System value prevails. The default value of the property is "false".
+#
+#jdk.security.allowNonCaAnchor=true
+
+#
+# JNDI Object Factories Filter
+#
+# This filter is used by the JNDI runtime to control the set of object factory classes
+# which will be allowed to instantiate objects from object references returned by
+# naming/directory systems. The factory class named by the reference instance will be
+# matched against this filter. The filter property supports pattern-based filter syntax
+# with the same format as jdk.serialFilter.
+#
+# Each pattern is matched against the factory class name to allow or disallow it's
+# instantiation. The access to a factory class is allowed unless the filter returns
+# REJECTED.
+#
+# Note: This property is currently used by the JDK Reference implementation.
+# It is not guaranteed to be examined and used by other implementations.
+#
+# If the system property jdk.jndi.object.factoriesFilter is also specified, it supersedes
+# the security property value defined here. The default value of the property is "*".
+#
+# The default pattern value allows any object factory class specified by the reference
+# instance to recreate the referenced object.
+#jdk.jndi.object.factoriesFilter=*
\ No newline at end of file
diff --git a/FCL/src/main/assets/java/lib/security/policy/limited/US_export_policy.jar b/FCL/src/main/assets/java/lib/security/policy/limited/US_export_policy.jar
new file mode 100644
index 000000000..d127b37bf
Binary files /dev/null and b/FCL/src/main/assets/java/lib/security/policy/limited/US_export_policy.jar differ
diff --git a/FCL/src/main/assets/java/lib/security/policy/limited/local_policy.jar b/FCL/src/main/assets/java/lib/security/policy/limited/local_policy.jar
new file mode 100644
index 000000000..ad34cf9ef
Binary files /dev/null and b/FCL/src/main/assets/java/lib/security/policy/limited/local_policy.jar differ
diff --git a/FCL/src/main/assets/java/lib/security/policy/unlimited/US_export_policy.jar b/FCL/src/main/assets/java/lib/security/policy/unlimited/US_export_policy.jar
new file mode 100644
index 000000000..d127b37bf
Binary files /dev/null and b/FCL/src/main/assets/java/lib/security/policy/unlimited/US_export_policy.jar differ
diff --git a/FCL/src/main/assets/java/lib/security/policy/unlimited/local_policy.jar b/FCL/src/main/assets/java/lib/security/policy/unlimited/local_policy.jar
new file mode 100644
index 000000000..a20232051
Binary files /dev/null and b/FCL/src/main/assets/java/lib/security/policy/unlimited/local_policy.jar differ
diff --git a/FCL/src/main/assets/java/lib/sound.properties b/FCL/src/main/assets/java/lib/sound.properties
new file mode 100644
index 000000000..68309d111
--- /dev/null
+++ b/FCL/src/main/assets/java/lib/sound.properties
@@ -0,0 +1,39 @@
+############################################################
+# Sound Configuration File
+############################################################
+#
+# This properties file is used to specify default service
+# providers for javax.sound.midi.MidiSystem and
+# javax.sound.sampled.AudioSystem.
+#
+# The following keys are recognized by MidiSystem methods:
+#
+# javax.sound.midi.Receiver
+# javax.sound.midi.Sequencer
+# javax.sound.midi.Synthesizer
+# javax.sound.midi.Transmitter
+#
+# The following keys are recognized by AudioSystem methods:
+#
+# javax.sound.sampled.Clip
+# javax.sound.sampled.Port
+# javax.sound.sampled.SourceDataLine
+# javax.sound.sampled.TargetDataLine
+#
+# The values specify the full class name of the service
+# provider, or the device name.
+#
+# See the class descriptions for details.
+#
+# Example 1:
+# Use MyDeviceProvider as default for SourceDataLines:
+# javax.sound.sampled.SourceDataLine=com.xyz.MyDeviceProvider
+#
+# Example 2:
+# Specify the default Synthesizer by its name "InternalSynth".
+# javax.sound.midi.Synthesizer=#InternalSynth
+#
+# Example 3:
+# Specify the default Receiver by provider and name:
+# javax.sound.midi.Receiver=com.sun.media.sound.MidiProvider#SunMIDI1
+#
diff --git a/FCL/src/main/assets/java/lib/tzdb.dat b/FCL/src/main/assets/java/lib/tzdb.dat
new file mode 100644
index 000000000..d070e4575
Binary files /dev/null and b/FCL/src/main/assets/java/lib/tzdb.dat differ
diff --git a/FCL/src/main/assets/java/man/ja_JP.UTF-8/man1/java.1 b/FCL/src/main/assets/java/man/ja_JP.UTF-8/man1/java.1
new file mode 100644
index 000000000..dd99bcde2
--- /dev/null
+++ b/FCL/src/main/assets/java/man/ja_JP.UTF-8/man1/java.1
@@ -0,0 +1,2931 @@
+'\" t
+.\" Copyright (c) 1994, 2014, Oracle and/or its affiliates. All rights reserved.
+.\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+.\"
+.\" This code is free software; you can redistribute it and/or modify it
+.\" under the terms of the GNU General Public License version 2 only, as
+.\" published by the Free Software Foundation.
+.\"
+.\" This code 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
+.\" version 2 for more details (a copy is included in the LICENSE file that
+.\" accompanied this code).
+.\"
+.\" You should have received a copy of the GNU General Public License version
+.\" 2 along with this work; if not, write to the Free Software Foundation,
+.\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+.\"
+.\" Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+.\" or visit www.oracle.com if you need additional information or have any
+.\" questions.
+.\"
+.\" Title: java
+.\" Language: Japanese
+.\" Date: 2015年3月3日
+.\" SectDesc: 基本ツール
+.\" Software: JDK 8
+.\" Arch: 汎用
+.\" Part Number: E58103-01
+.\" Doc ID: JSSON
+.\"
+.if n .pl 99999
+.TH "java" "1" "2015年3月3日" "JDK 8" "基本ツール"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名前"
+java \- Javaアプリケーションを起動します。
+.SH "概要"
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBjava\fR [\fIoptions\fR] \fIclassname\fR [\fIargs\fR]
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBjava\fR [\fIoptions\fR] \fB\-jar\fR \fIfilename\fR [\fIargs\fR]
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+\fIoptions\fR
+.RS 4
+空白で区切られたコマンド行オプション。オプションを参照してください。
+.RE
+.PP
+\fIclassname\fR
+.RS 4
+起動するクラスの名前。
+.RE
+.PP
+\fIfilename\fR
+.RS 4
+呼び出されるJavaアーカイブ(JAR)ファイルの名前。\fB\-jar\fRオプションと一緒にのみ使用します。
+.RE
+.PP
+\fIargs\fR
+.RS 4
+空白で区切られた\fBmain()\fRメソッドに渡される引数。
+.RE
+.SH "説明"
+.PP
+\fBjava\fRコマンドはJavaアプリケーションを開始します。Java Runtime Environment (JRE)を起動した後、指定したクラスをロードし、そのクラスの\fBmain()\fRメソッドを呼び出すことにより、これを行います。このメソッドは、\fIpublic\fRおよび\fIstatic\fRとして宣言する必要があります。また、値は返せません。さらに、\fBString\fR配列をパラメータとして指定できる必要があります。メソッド宣言は次の形式を含みます。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBpublic static void main(String[] args)\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+\fBjava\fRコマンドを使用して、\fBmain()\fRメソッドがあるか\fBjavafx\&.application\&.Application\fRを拡張するクラスをロードすることで、JavaFXアプリケーションを起動できます。後者の場合、起動ツールは\fBApplication\fRクラスのインスタンスを構成し、その\fBinit()\fRメソッドをコールし、\fBstart(javafx\&.stage\&.Stage)\fRメソッドをコールします。
+.PP
+デフォルトでは、\fBjava\fRコマンドのオプションではない最初の引数は、呼び出されるクラスの完全修飾名です。\fB\-jar\fRオプションを指定した場合、その引数は、アプリケーションのクラス・ファイルとリソース・ファイルを含むJARファイルの名前になります。起動クラスは、ソース・コードの\fBMain\-Class\fRマニフェスト・ヘッダーによって指定される必要があります。
+.PP
+JREは、ブートストラップ・クラス・パス、インストール済拡張機能およびユーザーのクラス・パスの3箇所から、起動クラス(およびアプリケーションで使用されている他のクラス)を検索します。
+.PP
+クラス・ファイル名またはJARファイル名の後の引数は、\fBmain()\fRメソッドに渡されます。
+.SH "オプション"
+.PP
+\fBjava\fRコマンドは、次のカテゴリに分類できる広範なオプションをサポートしています。
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+標準オプション
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+非標準オプション
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+高度なランタイム・オプション
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+高度なJITコンパイラ・オプション
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+高度なサービスアビリティ・オプション
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+高度なガベージ・コレクション・オプション
+.RE
+.PP
+標準のオプションは、Java Virtual Machine (JVM)のすべての実装でサポートすることが保証されます。これらは、JREのバージョンの確認、クラス・パスの設定、冗長な出力の有効化などの一般的なアクションに使用されます。
+.PP
+標準以外のオプションは、Java HotSpot仮想マシンに固有の汎用オプションであるため、すべてのJVM実装でサポートされることは保証されず、変更される可能性があります。これらのオプションは\fB\-X\fRで開始します。
+.PP
+拡張オプションは、不用意に使用しないことをお薦めします。これらは、特定のシステム要件を持つことが多く、システム構成パラメータへの特権アクセスが必要な場合があるJava HotSpot仮想マシン操作の特定の領域を調整するために使用される開発者オプションです。これらは、すべてのJVM実装でサポートされることは保証されず、変更される可能性があります。拡張オプションは\fB\-XX\fRで始まります。
+.PP
+最新リリースで非推奨または削除されるオプションを追跡するために、ドキュメントの最後に非推奨で削除されたオプションという名前のセクションがあります。
+.PP
+ブール・オプションは、デフォルトで無効になっている機能を有効にしたり、デフォルトで有効になっている機能を無効にするために使用されます。このようなオプションは、パラメータを必要としません。ブール値\fB\-XX\fRオプションは、プラス記号(\fB\-XX:+\fR\fIOptionName\fR)を使用して有効にし、マイナス記号(\fB\-XX:\-\fR\fIOptionName\fR)を使用して無効にします。
+.PP
+引数が必要なオプションの場合、引数は、オプション名を空白、コロン(:)または等号(=)で区切ったものになるか、あるいは引数がオプションの後に直接続く場合もあります(正確な構文は各オプションによって異なります)。サイズをバイト単位で指定するよう求められている場合、接尾辞を使用しないか、あるいはキロバイト(KB)には接尾辞\fBk\fRまたは\fBK\fR、メガバイト(MB)には接尾辞\fBm\fRまたは\fBM\fR、ギガバイト(GB)には接尾辞\fBg\fRまたは\fBG\fRを使用します。たとえば、サイズを8GBに設定するには、\fB8g\fR、\fB8192m\fR、\fB8388608k\fRまたは\fB8589934592\fRのいずれかを引数として指定できます。パーセントの指定が必要な場合は、0から1の数値を使用します(たとえば、25%の場合は\fB0\&.25\fRを指定します)。
+.SS "標準オプション"
+.PP
+これらは、JVMのすべての実装でサポートされる最も一般的に使用されるオプションです。
+.PP
+\-agentlib:\fIlibname\fR[=\fIoptions\fR]
+.RS 4
+指定したネイティブ・エージェント・ライブラリをロードします。ライブラリ名の後に、ライブラリに固有のオプションのカンマ区切りリストを使用できます。
+.sp
+オプション\fB\-agentlib:foo\fRを指定した場合、JVMは、\fBLD_LIBRARY_PATH\fRシステム変数(OS Xでは、この変数は\fBDYLD_LIBRARY_PATH\fRになります)で指定された場所に\fBlibfoo\&.so\fRという名前のライブラリをロードしようとします。
+.sp
+次の例では、スタックの深さ3で、20ミリ秒ごとにヒープ・プロファイリング・ツール(HPROF)ライブラリをロードして、サンプルのCPU情報を取得する方法を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-agentlib:hprof=cpu=samples,interval=20,depth=3\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+次の例では、メイン・クラスのロード前にJVMを一時停止して、Javaデバッグ・ワイヤ・プロトコル(JDWP)ライブラリをロードして、ポート8000でのソケット接続用にリスニングする方法を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-agentlib:jdwp=transport=dt_socket,server=y,address=8000\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+ネイティブ・エージェント・ライブラリの詳細は、次を参照してください。
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+http://docs\&.oracle\&.com/javase/8/docs/api/java/lang/instrument/package\-summary\&.htmlにある\fBjava\&.lang\&.instrument\fRパッケージの説明
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+http://docs\&.oracle\&.com/javase/8/docs/platform/jvmti/jvmti\&.html#startingにあるJVMツール・インタフェース・ガイドのエージェントのコマンド行オプションに関する項
+.RE
+.RE
+.PP
+\-agentpath:\fIpathname\fR[=\fIoptions\fR]
+.RS 4
+絶対パス名で指定されたネイティブ・エージェント・ライブラリをロードします。このオプションは\fB\-agentlib\fRと同等ですが、ライブラリのフル・パスおよびファイル名を使用します。
+.RE
+.PP
+\-client
+.RS 4
+Java HotSpot Client VMを選択します。64ビット・バージョンのJava SE Development Kit (JDK)では、現在、このオプションは無視され、かわりにServer JVMが使用されます。
+.sp
+デフォルトのJVM選択は、http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/server\-class\&.htmlにある
+サーバークラス・マシンの検出を参照してください。
+.RE
+.PP
+\-D\fIproperty\fR=\fIvalue\fR
+.RS 4
+システム・プロパティの値を設定します。\fIproperty\fR変数は、プロパティの名前を表す、空白のない文字列です。\fIvalue\fR変数は、プロパティの値を表す文字列です。\fIvalue\fRが空白を含む文字列の場合、それを引用符で囲みます(例:
+\fB\-Dfoo="foo bar"\fR)。
+.RE
+.PP
+\-d32
+.RS 4
+アプリケーションを32ビット環境で実行します。32ビット環境がインストールされていないかサポートされていない場合は、エラーが報告されます。デフォルトでは、64ビット・システムが使用されている場合を除き、アプリケーションは32ビット環境で実行されます。
+.RE
+.PP
+\-d64
+.RS 4
+アプリケーションを64ビット環境で実行します。64ビット環境がインストールされていないかサポートされていない場合は、エラーが報告されます。デフォルトでは、64ビット・システムが使用されている場合を除き、アプリケーションは32ビット環境で実行されます。
+.sp
+現在のところ、Java HotSpot Server VMのみが64ビットの操作をサポートしているため、\fB\-d64\fR使用時には\fB\-server\fRオプションが暗黙的に使用されます。\fB\-d64\fR使用時には、\fB\-client\fRオプションは無視されます。この仕様は、将来のリリースでは変更になる可能性があります。
+.RE
+.PP
+\-disableassertions[:[\fIpackagename\fR]\&.\&.\&.|:\fIclassname\fR]
+.br
+\-da[:[\fIpackagename\fR]\&.\&.\&.|:\fIclassname\fR]
+.RS 4
+アサーションを無効にします。デフォルトでは、アサーションはすべてのパッケージおよびクラスで無効になっています。
+.sp
+引数なしの\fB\-disableassertions\fR
+(\fB\-da\fR)を指定すると、すべてのパッケージおよびクラスでアサーションが無効になります。\fB\&.\&.\&.\fRで終わる\fIpackagename\fR引数を指定すると、指定したパッケージとそのサブパッケージ内でアサーションが無効になります。引数として\fB\&.\&.\&.\fRのみを指定すると、現在の作業ディレクトリにある名前のないパッケージ内でアサーションが無効になります。\fIclassname\fR引数を指定すると、切替えによって、指定したクラス内でアサーションが無効になります。
+.sp
+\fB\-disableassertions\fR
+(\fB\-da\fR)オプションは、すべてのクラス・ローダーおよびシステム・クラスに適用されます(システム・クラスにはクラス・ローダーはありません)。このルールには1つ例外があります。オプションの引数が指定されていない場合は、システム・クラスに適用されません。これにより、システム・クラスを除くすべてのクラスでアサーションを簡単に無効にすることができます。\fB\-disablesystemassertions\fRオプションを使用すると、すべてのシステム・クラスでアサーションを無効にすることができます。
+.sp
+特定のパッケージやクラスでアサーションを明示的に有効にするには、\fB\-enableassertions\fR
+(\fB\-ea\fR)オプションを使用します。両方のオプションを同時に使用できます。たとえば、パッケージ\fBcom\&.wombat\&.fruitbat\fR
+(およびそのサブパッケージ)ではアサーションを有効にして、クラス\fBcom\&.wombat\&.fruitbat\&.Brickbat\fRではアサーションを無効にして、\fBMyClass\fRアプリケーションを実行するには、次のコマンドを使用します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBjava \-ea:com\&.wombat\&.fruitbat\&.\&.\&. \-da:com\&.wombat\&.fruitbat\&.Brickbat MyClass\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-disablesystemassertions
+.br
+\-dsa
+.RS 4
+すべてのシステム・クラス内でアサーションを無効にします。
+.RE
+.PP
+\-enableassertions[:[\fIpackagename\fR]\&.\&.\&.|:\fIclassname\fR]
+.br
+\-ea[:[\fIpackagename\fR]\&.\&.\&.|:\fIclassname\fR]
+.RS 4
+アサーションを有効にします。デフォルトでは、アサーションはすべてのパッケージおよびクラスで無効になっています。
+.sp
+引数なしの\fB\-enableassertions\fR
+(\fB\-ea\fR)を指定すると、すべてのパッケージおよびクラスでアサーションが有効になります。\fB\&.\&.\&.\fRで終わる\fIpackagename\fR引数を指定すると、指定したパッケージとそのサブパッケージ内でアサーションが有効になります。引数として\fB\&.\&.\&.\fRのみを指定すると、現在の作業ディレクトリにある名前のないパッケージ内でアサーションが有効になります。\fIclassname\fR引数を指定すると、切替えによって、指定したクラス内でアサーションが有効になります。
+.sp
+\fB\-enableassertions\fR
+(\fB\-ea\fR)オプションは、すべてのクラス・ローダーおよびシステム・クラスに適用されます(システム・クラスにはクラス・ローダーはありません)。このルールには1つ例外があります。オプションの引数が指定されていない場合は、システム・クラスに適用されません。これにより、システム・クラスを除くすべてのクラスでアサーションを簡単に有効にすることができます。\fB\-enablesystemassertions\fRオプションは、すべてのシステム・クラスでアサーションを有効にする別のスイッチを提供します。
+.sp
+特定のパッケージやクラスでアサーションを明示的に無効にするには、\fB\-disableassertions\fR
+(\fB\-da\fR)オプションを使用します。単一コマンドにこれらのスイッチのインスタンスを複数指定した場合は、指定したスイッチが順番に処理されてからクラスがロードされます。たとえば、パッケージ\fBcom\&.wombat\&.fruitbat\fR
+(およびそのサブパッケージ)でのみアサーションを有効にして、クラス\fBcom\&.wombat\&.fruitbat\&.Brickbat\fRではアサーションを無効にして、\fBMyClass\fRアプリケーションを実行するには、次のコマンドを使用します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBjava \-ea:com\&.wombat\&.fruitbat\&.\&.\&. \-da:com\&.wombat\&.fruitbat\&.Brickbat MyClass\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-enablesystemassertions
+.br
+\-esa
+.RS 4
+すべてのシステム・クラス内でアサーションを有効にします。
+.RE
+.PP
+\-help
+.br
+\-?
+.RS 4
+実際にJVMを実行せずに、\fBjava\fRコマンドの使用状況情報を表示します。
+.RE
+.PP
+\-jar \fIfilename\fR
+.RS 4
+JARファイルにカプセル化されたプログラムを実行します。\fIfilename\fR引数は、使用するアプリケーションの開始点として機能する\fBpublic static void main(String[] args)\fRメソッドを定義する、\fBMain\-Class:\fR\fIclassname\fRという形式の1行を含むマニフェストを持つJARファイルの名前です。
+.sp
+\fB\-jar\fRオプションを使用すると、指定したJARファイルがすべてのユーザー・クラスのソースになり、クラス・パスの他の設定は無視されます。
+.sp
+JARファイルの詳細は、次のリソースを参照してください。
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+jar(1)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/jar/index\&.htmlにあるJavaアーカイブ(JAR)ファイルのガイド
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+http://docs\&.oracle\&.com/javase/tutorial/deployment/jar/index\&.htmlにある
+「レッスン: JARファイルのプログラムのパッケージ化」
+.RE
+.RE
+.PP
+\-javaagent:\fIjarpath\fR[=\fIoptions\fR]
+.RS 4
+指定したJavaプログラミング言語エージェントをロードします。Javaアプリケーションのインストゥルメントの詳細は、http://docs\&.oracle\&.com/javase/8/docs/api/java/lang/instrument/package\-summary\&.htmlにあるJava APIドキュメントの\fBjava\&.lang\&.instrument\fRパッケージの説明を参照してください。
+.RE
+.PP
+\-jre\-restrict\-search
+.RS 4
+ユーザー・プライベートなJREをバージョン検索に含めます。
+.RE
+.PP
+\-no\-jre\-restrict\-search
+.RS 4
+ユーザー・プライベートなJREをバージョン検索から除外します。
+.RE
+.PP
+\-server
+.RS 4
+Java HotSpot Server VMを選択します。64ビット・バージョンのJDKでは、Server VMのみをサポートしているため、その場合、このオプションは暗黙的です。
+.sp
+デフォルトのJVM選択は、http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/server\-class\&.htmlにある
+サーバークラス・マシンの検出を参照してください。
+.RE
+.PP
+\-showversion
+.RS 4
+バージョン情報を表示し、アプリケーションの実行を続行します。このオプションは\fB\-version\fRオプションと同等ですが、\-versionはバージョン情報の表示後にJVMに終了を指示する点が異なります。
+.RE
+.PP
+\-splash:\fIimgname\fR
+.RS 4
+\fIimgname\fRで指定されたイメージを含むスプラッシュ画面を表示します。たとえば、アプリケーションの起動時に\fBimages\fRディレクトリの\fBsplash\&.gif\fRファイルを表示するには、次のオプションを使用します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-splash:images/splash\&.gif\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-verbose:class
+.RS 4
+ロードされた各クラスに関する情報を表示します。
+.RE
+.PP
+\-verbose:gc
+.RS 4
+各ガベージ・コレクション(GC)イベントに関する情報を表示します。
+.RE
+.PP
+\-verbose:jni
+.RS 4
+ネイティブ・メソッドの使用およびその他のJava Native Interface (JNI)アクティビティに関する情報を表示します。
+.RE
+.PP
+\-version
+.RS 4
+バージョン情報を表示してから終了します。このオプションは\fB\-showversion\fRオプションと同等ですが、\-showversionはバージョン情報の表示後にJVMに終了を指示しない点が異なります。
+.RE
+.PP
+\-version:\fIrelease\fR
+.RS 4
+アプリケーションの実行に使用するリリース・バージョンを指定します。コールされた\fBjava\fRコマンドのバージョンがこの指定内容を満たさず、かつ適切な実装がシステム上で見つかった場合には、その適切な実装が使用されます。
+.sp
+\fIrelease\fR引数は、正確なバージョン文字列、または空白で区切られたバージョン文字列とバージョン範囲のリストを指定します。\fIバージョン文字列\fRは、次の形式で、開発者のバージョン番号を指定します:
+\fB1\&.\fR\fIx\fR\fB\&.0_\fR\fIu\fR
+(\fIx\fRはメジャー・バージョン番号、\fIu\fRは更新バージョン番号です)。\fIバージョン範囲\fRは、このバージョン以降を指定するにはバージョン文字列の後にプラス記号(\fB+\fR)を続けたもの、または一致する接頭辞を含む任意のバージョン文字列を指定するには一部のバージョン文字列の後にアスタリスク(\fB*\fR)を続けたもので構成されます。論理\fIOR\fRの組合せには空白、2つのバージョンの文字列/範囲の論理\fIAND\fRの組合せにはアンパサンド(\fB&\fR)を使用して、バージョン文字列とバージョン範囲を組み合せることができます。たとえば、クラスまたはJARファイルの実行にJRE 6u13 (1\&.6\&.0_13)または6u10 (1\&.6\&.0_10)以降の任意のJRE 6のいずれかを必要とする場合、次を指定します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-version:"1\&.6\&.0_13 1\&.6* & 1\&.6\&.0_10+"\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+引用符が必要なのは、\fIrelease\fRパラメータに空白がある場合のみです。
+.sp
+JARファイルの場合は、バージョン要件をコマンド行に指定するよりも、JARファイルのマニフェスト内に指定することが推奨されています。
+.RE
+.SS "非標準オプション"
+.PP
+これらのオプションは、Java HotSpot仮想マシンに固有の汎用オプションです。
+.PP
+\-X
+.RS 4
+使用可能なすべての\fB\-X\fRオプションのヘルプを表示します。
+.RE
+.PP
+\-Xbatch
+.RS 4
+バックグラウンド・コンパイルを無効にします。デフォルトでは、JVMでは、バックグラウンド・コンパイルが終了するまで、メソッドをバックグラウンド・タスクとしてコンパイルし、インタプリタ・モードでメソッドを実行します。\fB\-Xbatch\fRフラグを指定すると、バックグラウンド・コンパイルが無効になり、すべてのメソッドのコンパイルが完了するまでフォアグラウンド・タスクとして処理されます。
+.sp
+このオプションは\fB\-XX:\-BackgroundCompilation\fRと同等です。
+.RE
+.PP
+\-Xbootclasspath:\fIpath\fR
+.RS 4
+ブート・クラス・ファイルを検索するディレクトリ、JARファイルおよびZIPアーカイブの、コロン(:)で区切られたリストを指定します。これらは、JDKに含まれるブート・クラス・ファイルのかわりに使用されます。
+.sp
+JREバイナリ・コード・ライセンスに違反するため、\fBrt\&.jar\fRでクラスをオーバーライドする目的で、このオプションを使用するアプリケーションをデプロイしないでください。
+.RE
+.PP
+\-Xbootclasspath/a:\fIpath\fR
+.RS 4
+デフォルトのブートストラップ・クラス・パスの最後に追加するディレクトリ、JARファイルおよびZIPアーカイブの、コロン(:)で区切られたリストを指定します。
+.sp
+JREバイナリ・コード・ライセンスに違反するため、\fBrt\&.jar\fRでクラスをオーバーライドする目的で、このオプションを使用するアプリケーションをデプロイしないでください。
+.RE
+.PP
+\-Xbootclasspath/p:\fIpath\fR
+.RS 4
+デフォルトのブートストラップ・クラス・パスの先頭に追加するディレクトリ、JARファイルおよびZIPアーカイブの、コロン(:)で区切られたリストを指定します。
+.sp
+JREバイナリ・コード・ライセンスに違反するため、\fBrt\&.jar\fRでクラスをオーバーライドする目的で、このオプションを使用するアプリケーションをデプロイしないでください。
+.RE
+.PP
+\-Xcheck:jni
+.RS 4
+Java Native Interface (JNI)機能に対して追加チェックを行います。具体的には、これは、JNIリクエストを処理する前に、JNI関数に渡されるパラメータと実行環境のデータを検証します。無効なデータが見つかった場合は、ネイティブ・コードに問題があることを示しているため、JVMはリカバリ不能なエラーを発生して終了します。このオプションを使用すると、パフォーマンス低下が予想されます。
+.RE
+.PP
+\-Xcomp
+.RS 4
+最初の呼出しでメソッドのコンパイルを強制的に実行します。デフォルトでは、クライアントVM(\fB\-client\fR)は1,000の解釈されたメソッド呼出しを実行し、サーバーVM(\fB\-server\fR)は10,000の解釈されたメソッド呼出しを実行して、効率的なコンパイルのための情報を収集します。\fB\-Xcomp\fRオプションを指定すると、解釈されたメソッド呼出しが無効になり、効率を犠牲にしてコンパイルのパフォーマンスが向上します。
+.sp
+\fB\-XX:CompileThreshold\fRオプションを使用して、コンパイルの前に、解釈されたメソッド呼出しの数を変更することもできます。
+.RE
+.PP
+\-Xdebug
+.RS 4
+何も行いません。後方互換性のために用意されています。
+.RE
+.PP
+\-Xdiag
+.RS 4
+追加の診断メッセージを表示します。
+.RE
+.PP
+\-Xfuture
+.RS 4
+クラス・ファイル形式の仕様への準拠を強化する、厳密なクラス・ファイル形式のチェックが有効になります。将来のリリースでは、より厳密なチェックがデフォルトになるため、新しいコードを開発するときには、開発者はこのフラグを使用することをお薦めします。
+.RE
+.PP
+\-Xint
+.RS 4
+インタプリタ専用モードでアプリケーションを実行します。ネイティブ・コードへのコンパイルは無効になり、すべてのバイトコードがインタプリタによって実行されます。ジャスト・イン・タイム(JIT)コンパイラが提供するパフォーマンス上の利点は、このモードでは実現されません。
+.RE
+.PP
+\-Xinternalversion
+.RS 4
+\fB\-version\fRオプションより詳細なJVMバージョン情報を表示してから終了します。
+.RE
+.PP
+\-Xloggc:\fIfilename\fR
+.RS 4
+詳細なGCイベント情報をロギング用にリダイレクトするファイルを設定します。このファイルに書き込まれる情報は、記録された各イベントの前に行われる最初のGCイベント以降に経過した時間を指定した\fB\-verbose:gc\fRの出力と類似しています。\fB\-Xloggc\fRオプションは\fB\-verbose:gc\fRをオーバーライドします(これらの両方が同じ\fBjava\fRコマンドで指定された場合)。
+.sp
+例:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-Xloggc:garbage\-collection\&.log\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-Xmaxjitcodesize=\fIsize\fR
+.RS 4
+JITコンパイルされたコードの最大コード・キャッシュ・サイズ(バイト単位)を指定します。キロバイトを示す場合は文字\fBk\fRまたは\fBK\fR、メガバイトを示す場合は文字\fBm\fRまたは\fBM\fR、ギガバイトを示す場合は文字\fBg\fRまたは\fBG\fRを追加します。デフォルトでは、この値は48MBに設定されています。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-Xmaxjitcodesize=48m\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+このオプションは\fB\-XX:ReservedCodeCacheSize\fRと同等です。
+.RE
+.PP
+\-Xmixed
+.RS 4
+ネイティブ・コードにコンパイルされたホット・メソッドを除き、インタプリタによってすべてのバイトコードを実行します。
+.RE
+.PP
+\-Xmn\fIsize\fR
+.RS 4
+若い世代(ナーサリ)のヒープの初期サイズおよび最大サイズ(バイト単位)を設定します。キロバイトを示す場合は文字\fBk\fRまたは\fBK\fR、メガバイトを示す場合は文字\fBm\fRまたは\fBM\fR、ギガバイトを示す場合は文字\fBg\fRまたは\fBG\fRを追加します。
+.sp
+ヒープの若い世代リージョンは新しいオブジェクトに使用されます。GCは、他のリージョンよりこのリージョンで、より頻繁に実行されます。若い世代のサイズが小さすぎる場合、多数のマイナー・ガベージ・コレクションが実行されます。サイズが大きすぎる場合、フル・ガベージ・コレクションのみが実行されますが、完了までに時間がかかることがあります。若い世代のサイズは、全体のヒープ・サイズの半分から4分の1の間にしておくことをお薦めします。
+.sp
+次の例では、若い世代の初期サイズおよび最大サイズを様々な単位を使用して256MBに設定する方法を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-Xmn256m\fR
+\fB\-Xmn262144k\fR
+\fB\-Xmn268435456\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+若い世代のヒープの初期サイズと最大サイズの両方を設定する\fB\-Xmn\fRオプションのかわりに、初期サイズの設定には\fB\-XX:NewSize\fRを、最大サイズの設定には\fB\-XX:MaxNewSize\fRを使用できます。
+.RE
+.PP
+\-Xms\fIsize\fR
+.RS 4
+ヒープの初期サイズ(バイト単位)を設定します。指定する値は、1MBより大きい1024の倍数にする必要があります。キロバイトを示す場合は文字\fBk\fRまたは\fBK\fR、メガバイトを示す場合は文字\fBm\fRまたは\fBM\fR、ギガバイトを示す場合は文字\fBg\fRまたは\fBG\fRを追加します。
+.sp
+次の例では、割り当てられたメモリーのサイズを様々な単位を使用して6MBに設定する方法を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-Xms6291456\fR
+\fB\-Xms6144k\fR
+\fB\-Xms6m\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+このオプションを設定しない場合、初期サイズは、古い世代と若い世代に割り当てられたサイズの合計として設定されます。若い世代のヒープの初期サイズは、\fB\-Xmn\fRオプションまたは\fB\-XX:NewSize\fRオプションを使用して設定できます。
+.RE
+.PP
+\-Xmx\fIsize\fR
+.RS 4
+メモリー割当てプールの最大サイズ(バイト単位)を指定します。指定する値は、2MBより大きい1024の倍数にする必要があります。キロバイトを示す場合は文字\fBk\fRまたは\fBK\fR、メガバイトを示す場合は文字\fBm\fRまたは\fBM\fR、ギガバイトを示す場合は文字\fBg\fRまたは\fBG\fRを追加します。デフォルト値は、実行時にシステム構成に基づいて選択されます。サーバー・デプロイメントでは、\fB\-Xms\fRおよび\fB\-Xmx\fRは通常同じ値に設定されます。http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/gctuning/index\&.htmlの\fIJava SE HotSpot仮想マシンのガベージ・コレクション・チューニング・ガイド\fRのエルゴノミクスに関する項を参照してください。
+.sp
+次の例では、割り当てられたメモリーの許可される最大サイズを様々な単位を使用して80MBに設定する方法を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-Xmx83886080\fR
+\fB\-Xmx81920k\fR
+\fB\-Xmx80m\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+\fB\-Xmx\fRオプションは\fB\-XX:MaxHeapSize\fRと同等です。
+.RE
+.PP
+\-Xnoclassgc
+.RS 4
+クラスのガベージ・コレクション(GC)を無効にします。これにより、GC時間を節約でき、アプリケーション実行中の中断が短縮されます。
+.sp
+起動時に\fB\-Xnoclassgc\fRを指定すると、アプリケーション内のクラス・オブジェクトは、GCの間はそのまま残り、常にライブであるとみなされます。これにより、より多くのメモリーが永久に占有されることになり、注意して使用しないと、メモリー不足の例外がスローされます。
+.RE
+.PP
+\-Xprof
+.RS 4
+実行中のプログラムをプロファイルし、プロファイリング・データを標準出力に送信します。このオプションは、プログラム開発用のユーティリティとして提供されています。本番稼働システムでの使用を目的としたものではありません。
+.RE
+.PP
+\-Xrs
+.RS 4
+JVMによるオペレーティング・システム・シグナルの使用を減らします。
+.sp
+シャットダウン・フックは、JVMが突然終了した場合でも、シャットダウン時にユーザー・クリーンアップ・コード(データベース接続のクローズなど)を実行することによって、Javaアプリケーションのシャットダウンを順番に有効にします。
+.sp
+JVMは、予期しない終了のシャットダウン・フックを実装するためにシグナルをキャッチします。JVMは、\fBSIGHUP\fR、\fBSIGINT\fRおよび\fBSIGTERM\fRを使用して、シャットダウン・フックの実行を開始します。
+.sp
+JVMは、デバッグの目的でスレッド・スタックをダンプするという機能を実現するために、同様のメカニズムを使用します。JVMは、スレッド・ダンプを実行するために\fBSIGQUIT\fRを使用します。
+.sp
+JVMを埋め込んでいるアプリケーションは、\fBSIGINT\fRや\fBSIGTERM\fRなどのシグナルを頻繁にトラップする必要があり、その結果、JVMのシグナル・ハンドラと衝突する可能性があります。\fB\-Xrs\fRオプションは、この問題に対処するために使用できます。\fB\-Xrs\fRが使用されている場合、\fBSIGINT\fR、\fBSIGTERM\fR、\fBSIGHUP\fRおよび\fBSIGQUIT\fRのシグナル・マスクはJVMによって変更されず、これらのシグナルのシグナル・ハンドラはインストールされません。
+.sp
+\fB\-Xrs\fRを指定すると、次の2つの結果が生じます:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fBSIGQUIT\fRによるスレッド・ダンプは使用できません。
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+シャットダウン・フック処理の実行は、JVMが終了しようとしている時点で\fBSystem\&.exit()\fRを呼び出すなどして、ユーザー・コード側で行う必要があります。
+.RE
+.RE
+.PP
+\-Xshare:\fImode\fR
+.RS 4
+クラス・データ共有モードを設定します。このオプションで使用可能な\fImode\fR引数は次のとおりです。
+.PP
+auto
+.RS 4
+可能な場合、共有クラスのデータを使用します。これは、Java HotSpot 32\-Bit Client VMの場合のデフォルト値です。
+.RE
+.PP
+on
+.RS 4
+クラス・データ共有の使用が必要です。クラス・データ共有を使用できない場合、エラー・メッセージを出力して終了します。
+.RE
+.PP
+off
+.RS 4
+共有クラス・データを使用しません。これは、Java HotSpot 32\-Bit Server VM、Java HotSpot 64\-Bit Client VMおよびJava HotSpot 64\-Bit Server VMの場合のデフォルト値です。
+.RE
+.PP
+dump
+.RS 4
+クラス・データ共有アーカイブを手動で生成します。
+.RE
+.RE
+.PP
+\-XshowSettings:\fIcategory\fR
+.RS 4
+設定を表示して続行します。このオプションで使用可能な\fIcategory\fR引数は次のとおりです。
+.PP
+all
+.RS 4
+設定のすべてのカテゴリを表示します。これがデフォルト値です。
+.RE
+.PP
+locale
+.RS 4
+ロケールに関連する設定を表示します。
+.RE
+.PP
+properties
+.RS 4
+システム・プロパティに関連する設定を表示します。
+.RE
+.PP
+vm
+.RS 4
+JVMの設定を表示します。
+.RE
+.RE
+.PP
+\-Xss\fIsize\fR
+.RS 4
+スレッドのスタック・サイズ(バイト単位)を設定します。KBを示す場合は文字\fBk\fRまたは\fBK\fR、MBを示す場合は文字\fBm\fRまたは\fBM\fR、GBを示す場合は文字\fBg\fRまたは\fBG\fRを追加します。デフォルト値はプラットフォームによって異なります。
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Linux/ARM (32ビット): 320KB
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Linux/i386 (32ビット): 320KB
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Linux/x64 (64ビット): 1024KB
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+OS X (64ビット): 1024KB
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Oracle Solaris/i386 (32ビット): 320KB
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Oracle Solaris/x64 (64ビット): 1024KB
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Windows: 仮想メモリーによって異なります。
+.RE
+.sp
+次の例では、スレッド・スタック・サイズを異なる単位で1024KBに設定します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-Xss1m\fR
+\fB\-Xss1024k\fR
+\fB\-Xss1048576\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+このオプションは\fB\-XX:ThreadStackSize\fRと同等です。
+.RE
+.PP
+\-Xusealtsigs
+.RS 4
+JVM内部シグナルの\fBSIGUSR1\fRおよび\fBSIGUSR2\fRのかわりに、代替シグナルを使用します。このオプションは\fB\-XX:+UseAltSigs\fRと同等です。
+.RE
+.PP
+\-Xverify:\fImode\fR
+.RS 4
+バイトコード・ベリファイアのモードを設定します。バイトコードの検証は一部の問題のトラブルシューティングに役立ちますが、実行中のアプリケーションへのオーバーヘッドを増大させます。このオプションで使用可能な\fImode\fR引数は次のとおりです。
+.PP
+なし
+.RS 4
+バイトコードを検証しません。これにより、起動時間が短縮され、Javaによって提供される保護も軽減されます。
+.RE
+.PP
+remote
+.RS 4
+ブートストラップ・クラス・ローダーでロードされていないこれらのクラスを検証します。これは、\fB\-Xverify\fRオプションを指定しない場合のデフォルトの動作です。
+.RE
+.PP
+all
+.RS 4
+すべてのクラスを検証します。
+.RE
+.RE
+.SS "高度なランタイム・オプション"
+.PP
+これらのオプションは、Java HotSpot VMの実行時の動作を制御します。
+.PP
+\-XX:+DisableAttachMechanism
+.RS 4
+JVMにツールをアタッチするメカニズムを無効にするオプションを有効にします。デフォルトでは、このオプションは無効になっており、これは、アタッチ・メカニズムを有効にすると、\fBjcmd\fR、\fBjstack\fR、\fBjmap\fR、\fBjinfo\fRなどのツールを使用できることを意味します。
+.RE
+.PP
+\-XX:ErrorFile=\fIfilename\fR
+.RS 4
+リカバリ不能なエラーが発生した場合にエラー・データが書き込まれるパスおよびファイル名を指定します。デフォルトでは、このファイルは、現在の作業ディレクトリに作成され、名前は\fBhs_err_pid\fR\fIpid\fR\fB\&.log\fR
+(\fIpid\fRはエラーの原因となったプロセスの識別子)になります。次の例では、デフォルトのログ・ファイルを設定する方法を示します(プロセスの識別子は\fB%p\fRとして指定されます)。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:ErrorFile=\&./hs_err_pid%p\&.log\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+次の例では、エラー・ログを\fB/var/log/java/java_error\&.log\fRに設定する方法を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:ErrorFile=/var/log/java/java_error\&.log\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+(領域不足、権限の問題または別の問題により)指定したディレクトリにファイルを作成できない場合、ファイルはオペレーティング・システムの一時ディレクトリに作成されます。一時ディレクトリは\fB/tmp\fRです。
+.RE
+.PP
+\-XX:+FailOverToOldVerifier
+.RS 4
+新しいタイプ・チェッカが失敗した場合の、古いベリファイアへの自動フェイルオーバーを有効にします。デフォルトでは、このオプションは無効になっており、最近のバイトコード・バージョンを使用したクラスには、これは無視されます(つまり、無効として処理されます)。古いバージョンのバイトコードを使用したクラスには、これを有効化できます。
+.RE
+.PP
+\-XX:LargePageSizeInBytes=\fIsize\fR
+.RS 4
+Solarisでは、Javaヒープに使用されるラージ・ページの最大サイズ(バイト単位)を設定します。\fIsize\fR引数は、2の累乗(2、4、8、16、\&.\&.\&.)である必要があります。キロバイトを示す場合は文字\fBk\fRまたは\fBK\fR、メガバイトを示す場合は文字\fBm\fRまたは\fBM\fR、ギガバイトを示す場合は文字\fBg\fRまたは\fBG\fRを追加します。デフォルトでは、サイズは0に設定され、これは、JVMではラージ・ページのサイズが自動的に選択されていることを意味します。
+.sp
+次の例では、ラージ・ページのサイズを4メガバイト(MB)に設定する方法を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:LargePageSizeInBytes=4m\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:MaxDirectMemorySize=\fIsize\fR
+.RS 4
+新規I/O (\fBjava\&.nio\fRパッケージ)の直接バッファ割当ての最大合計サイズ(バイト単位)を設定します。キロバイトを示す場合は文字\fBk\fRまたは\fBK\fR、メガバイトを示す場合は文字\fBm\fRまたは\fBM\fR、ギガバイトを示す場合は文字\fBg\fRまたは\fBG\fRを追加します。デフォルトでは、サイズは0に設定され、これは、JVMではNIOの直接バッファ割当てのサイズが自動的に選択されていることを意味します。
+.sp
+次の例では、NIOサイズを異なる単位で1024KBに設定する方法を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:MaxDirectMemorySize=1m\fR
+\fB\-XX:MaxDirectMemorySize=1024k\fR
+\fB\-XX:MaxDirectMemorySize=1048576\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:NativeMemoryTracking=\fImode\fR
+.RS 4
+JVMのネイティブ・メモリー使用状況のトラッキングのモードを指定します。このオプションで使用可能な\fImode\fR引数は次のとおりです。
+.PP
+off
+.RS 4
+JVMのネイティブ・メモリー使用状況を追跡しません。これは、\fB\-XX:NativeMemoryTracking\fRオプションを指定しない場合のデフォルトの動作です。
+.RE
+.PP
+summary
+.RS 4
+JVMサブシステム(Javaヒープ、クラス、コード、スレッドなど)によるメモリー使用状況のみ追跡します。
+.RE
+.PP
+detail
+.RS 4
+JVMサブシステムによるメモリー使用状況のトラッキングに加えて、個々の\fBCallSite\fR
+(個々の仮想メモリー・リージョンおよびそのコミット済リージョン)によるメモリー使用状況を追跡します。
+.RE
+.RE
+.PP
+\-XX:ObjectAlignmentInBytes=\fIalignment\fR
+.RS 4
+Javaオブジェクトのメモリー配置を設定します(バイト単位)。デフォルトでは、値が8バイトに設定されます。指定される値は、2の累乗にして8から256(両端を含む)の範囲内にする必要があります。このオプションにより、大きいJavaヒープ・サイズで圧縮ポインタを使用できます。
+.sp
+バイト単位のヒープ・サイズ制限は次のように計算されます:
+.sp
+\fB4GB * ObjectAlignmentInBytes\fR
+.sp
+注意: 配置の値が増えると、オブジェクト間の未使用の領域も増えます。結果として、大きいヒープ・サイズで圧縮ポインタを使用するメリットがわからない可能性があります。
+.RE
+.PP
+\-XX:OnError=\fIstring\fR
+.RS 4
+リカバリ不能なエラーが発生したときに実行する、カスタム・コマンドまたは一連のセミコロン区切りのコマンドを設定します。文字列に空白が含まれている場合は、引用符で囲む必要があります。
+.sp
+次の例では、\fB\-XX:OnError\fRオプションを使用してコア・イメージを作成するために\fBgcore\fRコマンドを実行する方法、およびリカバリ不能なエラーの場合にデバッガを起動してプロセスに接続する方法を示します(\fB%p\fRは現在のプロセスを指定します)。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:OnError="gcore %p;dbx \- %p"\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:OnOutOfMemoryError=\fIstring\fR
+.RS 4
+\fBOutOfMemoryError\fR例外が最初にスローされたときに実行する、カスタム・コマンドまたは一連のセミコロン区切りのコマンドを設定します。文字列に空白が含まれている場合は、引用符で囲む必要があります。コマンド文字列の例は、\fB\-XX:OnError\fRオプションの説明を参照してください。
+.RE
+.PP
+\-XX:+PerfDataSaveToFile
+.RS 4
+有効な場合、Javaアプリケーションの終了時にjstat(1)バイナリ・データを保存します。このバイナリ・データは\fBhsperfdata_\fR\fI\fRという名前のファイルに保存されます。\fI\fRは、実行したJavaアプリケーションのプロセス識別子です。次のように\fBjstat\fRを使用して、このファイルに含まれるパフォーマンス・データを表示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBjstat \-class file:///\fR\fB\fI\fR\fR\fB/hsperfdata_\fR\fB\fI\fR\fR
+\fBjstat \-gc file:///\fR\fB\fI\fR\fR\fB/hsperfdata_\fR\fB\fI\fR\fR
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:+PrintCommandLineFlags
+.RS 4
+コマンド行に表示された、人間工学的に選択したJVMフラグの印刷を有効にします。これは、ヒープ領域サイズや選択されたガベージ・コレクタなど、JVMによって設定されたエルゴノミック値を確認する場合に役立ちます。デフォルトでは、このオプションは無効であり、フラグは印刷されません。
+.RE
+.PP
+\-XX:+PrintNMTStatistics
+.RS 4
+ネイティブ・メモリーのトラッキングが有効な場合に、JVMの終了時に収集されたネイティブ・メモリーのトラッキング・データの印刷を有効にします(\fB\-XX:NativeMemoryTracking\fRを参照してください)。デフォルトでは、このオプションは無効であり、ネイティブ・メモリーのトラッキング・データは印刷されません。
+.RE
+.PP
+\-XX:+RelaxAccessControlCheck
+.RS 4
+ベリファイア内のアクセス制御チェックの量を減らします。デフォルトでは、このオプションは無効になっており、最近のバイトコード・バージョンを使用したクラスには、これは無視されます(つまり、無効として処理されます)。古いバージョンのバイトコードを使用したクラスには、これを有効化できます。
+.RE
+.PP
+\-XX:+ShowMessageBoxOnError
+.RS 4
+JVMでリカバリ不能なエラーが発生した場合、ダイアログ・ボックスの表示を有効にします。これにより、JVMにデバッガを接続してエラーの原因を調査できるように、JVMを終了しないようにして、プロセスをアクティブなままにします。デフォルトでは、このオプションは無効です。
+.RE
+.PP
+\-XX:ThreadStackSize=\fIsize\fR
+.RS 4
+スレッドのスタック・サイズ(バイト単位)を設定します。キロバイトを示す場合は文字\fBk\fRまたは\fBK\fR、メガバイトを示す場合は文字\fBm\fRまたは\fBM\fR、ギガバイトを示す場合は文字\fBg\fRまたは\fBG\fRを追加します。デフォルト値はプラットフォームによって異なります。
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Linux/ARM (32ビット): 320KB
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Linux/i386 (32ビット): 320KB
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Linux/x64 (64ビット): 1024KB
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+OS X (64ビット): 1024KB
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Oracle Solaris/i386 (32ビット): 320KB
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Oracle Solaris/x64 (64ビット): 1024KB
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Windows: 仮想メモリーによって異なります。
+.RE
+.sp
+次の例では、スレッド・スタック・サイズを異なる単位で1024KBに設定する方法を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:ThreadStackSize=1m\fR
+\fB\-XX:ThreadStackSize=1024k\fR
+\fB\-XX:ThreadStackSize=1048576\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+このオプションは\fB\-Xss\fRと同等です。
+.RE
+.PP
+\-XX:+TraceClassLoading
+.RS 4
+クラスがロードされるときのクラスのトレースを有効にします。デフォルトでは、このオプションは無効であり、クラスはトレースされません。
+.RE
+.PP
+\-XX:+TraceClassLoadingPreorder
+.RS 4
+クラスが参照される順序で、ロードされたすべてのクラスのトレースを有効にします。デフォルトでは、このオプションは無効であり、クラスはトレースされません。
+.RE
+.PP
+\-XX:+TraceClassResolution
+.RS 4
+定数プールの解決のトレースを有効にします。デフォルトでは、このオプションは無効であり、定数プールの解決はトレースされません。
+.RE
+.PP
+\-XX:+TraceClassUnloading
+.RS 4
+クラスがアンロードされるときのクラスのトレースを有効にします。デフォルトでは、このオプションは無効であり、クラスはトレースされません。
+.RE
+.PP
+\-XX:+TraceLoaderConstraints
+.RS 4
+ローダー制約の記録のトレースを有効にします。デフォルトでは、このオプションは無効であり、ローダー制約の記録は追跡されません。
+.RE
+.PP
+\-XX:+UseAltSigs
+.RS 4
+JVM内部シグナルの\fBSIGUSR1\fRおよび\fBSIGUSR2\fRのかわりに、代替シグナルの使用を有効にします。デフォルトでは、このオプションは無効であり、代替シグナルは使用されません。このオプションは\fB\-Xusealtsigs\fRと同等です。
+.RE
+.PP
+\-XX:\-UseBiasedLocking
+.RS 4
+バイアス・ロックの使用を無効にします。かなりの量の非競合の同期化がある一部のアプリケーションは、このフラグを有効にすると大幅な高速化が実現しますが、特定のパターンのロックがあるアプリケーションは、速度が低下することがあります。バイアス・ロックの方法の詳細は、http://www\&.oracle\&.com/technetwork/java/tuning\-139912\&.html#section4\&.2\&.5にあるJavaチューニングのホワイト・ペーパーの例を参照してください。
+.sp
+デフォルトでは、このオプションは有効になっています。
+.RE
+.PP
+\-XX:\-UseCompressedOops
+.RS 4
+圧縮されたポインタの使用を無効にします。デフォルトではこのオプションが有効であり、Javaヒープ・サイズが32GBより小さい場合に圧縮ポインタが使用されます。このオプションを有効にすると、オブジェクト参照は、64ビットのポインタではなく32ビットのオフセットとして表され、これにより、32GBより小さいJavaヒープ・サイズのアプリケーションの実行時に、通常、パフォーマンスが向上します。このオプションは、64ビットのJVMでのみ機能します。
+.sp
+Javaヒープ・サイズが32GBより大きい場合にも圧縮ポインタを使用できます。\fB\-XX:ObjectAlignmentInBytes\fRオプションを参照してください。
+.RE
+.PP
+\-XX:+UseHugeTLBFS
+.RS 4
+Linux用のこのオプションは、\fB\-XX:+UseLargePages\fRを指定するのと同じです。このオプションは、デフォルトでは無効になっています。このオプションは、メモリーの予約時にすべてのラージ・ページを事前に割り当てます。そのため、JVMはラージ・ページ・メモリー領域を動的に拡張または縮小できません。この動作を行う場合は、\fB\-XX:UseTransparentHugePages\fRを参照してください。
+.sp
+詳細は、"ラージ・ページ"を参照してください。
+.RE
+.PP
+\-XX:+UseLargePages
+.RS 4
+ラージ・ページのメモリーの使用を有効にします。デフォルトでは、このオプションは無効であり、ラージ・ページのメモリーは使用されません。
+.sp
+詳細は、"ラージ・ページ"を参照してください。
+.RE
+.PP
+\-XX:+UseMembar
+.RS 4
+スレッドの状態の遷移でメンバーの発行を有効にします。このオプションは、有効になっているARMサーバーを除くすべてのプラットフォーム上で、デフォルトでは無効になっています。(ARMサーバーでこのオプションを無効にしないことをお薦めします。)
+.RE
+.PP
+\-XX:+UsePerfData
+.RS 4
+\fBperfdata\fR機能を有効にします。このオプションはデフォルトで有効になっており、JVMのモニタリングおよびパフォーマンス・テストが可能になります。これを無効にすると、\fBhsperfdata_userid\fRディレクトリの作成を抑制します。\fBperfdata\fR機能を無効にするには、\fB\-XX:\-UsePerfData\fRを指定します。
+.RE
+.PP
+\-XX:+UseTransparentHugePages
+.RS 4
+Linuxでは、動的に拡張または縮小できるラージ・ページの使用を有効化してください。このオプションは、デフォルトでは無効になっています。OSが他のページを移動してヒュージ・ページを作成するため、透過的ヒュージ・ページでパフォーマンスの問題が検出される場合があります。このオプションは試験的に使用できます。
+.sp
+詳細は、"ラージ・ページ"を参照してください。
+.RE
+.PP
+\-XX:+AllowUserSignalHandlers
+.RS 4
+アプリケーションによるシグナル・ハンドラのインストールを有効にします。デフォルトでは、このオプションは無効であり、アプリケーションはシグナル・ハンドラをインストールすることは許可されていません。
+.RE
+.SS "高度なJITコンパイラ・オプション"
+.PP
+これらのオプションは、Java HotSpot VMで実行される動的なjust\-in\-time (JIT)コンパイラを制御します。
+.PP
+\-XX:+AggressiveOpts
+.RS 4
+積極的なパフォーマンス最適化機能の使用を有効にします。これは今後のリリースでデフォルトになる予定です。デフォルトでは、このオプションは無効であり、試験的なパフォーマンス機能は使用されません。
+.RE
+.PP
+\-XX:AllocateInstancePrefetchLines=\fIlines\fR
+.RS 4
+インスタンス割当てポインタの前にプリフェッチする行数を設定します。デフォルトでは、プリフェッチする行数は1に設定されています。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:AllocateInstancePrefetchLines=1\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+Java HotSpot Server VMのみが、このオプションをサポートしています。
+.RE
+.PP
+\-XX:AllocatePrefetchDistance=\fIsize\fR
+.RS 4
+オブジェクト割当てのプリフェッチ距離のサイズ(バイト単位)を設定します。新規オブジェクトの値で書き込もうとするメモリーは、最後に割り当てられたオブジェクトのアドレスから、この距離までプリフェッチされます。各Javaスレッドには独自の割当てポイントがあります。
+.sp
+負の値は、プリフェッチ距離はプラットフォームに基づいて選択されることを示します。正の値は、プリフェッチするバイト数です。キロバイトを示す場合は文字\fBk\fRまたは\fBK\fR、メガバイトを示す場合は文字\fBm\fRまたは\fBM\fR、ギガバイトを示す場合は文字\fBg\fRまたは\fBG\fRを追加します。デフォルト値は\-1に設定されています。
+.sp
+次の例では、プリフェッチ距離を1024バイトに設定する方法を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:AllocatePrefetchDistance=1024\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+Java HotSpot Server VMのみが、このオプションをサポートしています。
+.RE
+.PP
+\-XX:AllocatePrefetchInstr=\fIinstruction\fR
+.RS 4
+割当てポインタの前にプリフェッチするプリフェッチ命令を設定します。Java HotSpot Server VMのみが、このオプションをサポートしています。使用可能な値は0から3までです。値の背後にある実際の命令は、プラットフォームによって異なります。デフォルトでは、プリフェッチ命令は0に設定されています。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:AllocatePrefetchInstr=0\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+Java HotSpot Server VMのみが、このオプションをサポートしています。
+.RE
+.PP
+\-XX:AllocatePrefetchLines=\fIlines\fR
+.RS 4
+コンパイルされたコードで生成されるプリフェッチ命令を使用して、最後のオブジェクト割当て後にロードするキャッシュ行数を設定します。最後に割り当てられたオブジェクトがインスタンスの場合は、デフォルト値は1になり、配列の場合は3になります。
+.sp
+次の例では、ロードされるキャッシュ行数を5に設定する方法を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:AllocatePrefetchLines=5\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+Java HotSpot Server VMのみが、このオプションをサポートしています。
+.RE
+.PP
+\-XX:AllocatePrefetchStepSize=\fIsize\fR
+.RS 4
+順次プリフェッチ命令のステップ・サイズ(バイト単位)を設定します。キロバイトを示す場合は文字\fBk\fRまたは\fBK\fR、メガバイトを示す場合は文字\fBm\fRまたは\fBM\fR、ギガバイトを示す場合は文字\fBg\fRまたは\fBG\fRを追加します。デフォルトでは、ステップ・サイズは16バイトに設定されています。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:AllocatePrefetchStepSize=16\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+Java HotSpot Server VMのみが、このオプションをサポートしています。
+.RE
+.PP
+\-XX:AllocatePrefetchStyle=\fIstyle\fR
+.RS 4
+プリフェッチ命令に生成されるコード・スタイルを設定します。\fIstyle\fR引数は、0から3までの整数です。
+.PP
+0
+.RS 4
+プリフェッチ命令を生成しません。
+.RE
+.PP
+1
+.RS 4
+各割当ての後で、プリフェッチ命令を実行します。これはデフォルトのパラメータです。
+.RE
+.PP
+2
+.RS 4
+スレッド・ローカルな割当てブロック(TLAB)ウォーターマーク・ポインタを使用して、プリフェッチ命令を実行するタイミングを決定します。
+.RE
+.PP
+3
+.RS 4
+割当てプリフェッチ用のSPARCでBIS命令を使用します。
+.RE
+.sp
+Java HotSpot Server VMのみが、このオプションをサポートしています。
+.RE
+.PP
+\-XX:+BackgroundCompilation
+.RS 4
+バックグラウンド・コンパイルを有効にします。このオプションはデフォルトで有効になっています。バックグラウンド・コンパイルを無効にするには、\fB\-XX:\-BackgroundCompilation\fRを指定します(これは\fB\-Xbatch\fRを指定するのと同等です)。
+.RE
+.PP
+\-XX:CICompilerCount=\fIthreads\fR
+.RS 4
+コンパイルに使用するコンパイラ・スレッドの数を設定します。デフォルトでは、スレッド数は、サーバーJVMの場合は2、クライアントJVMの場合は1に設定されており、層コンパイルが使用されている場合、コア数に合せて増減します。次の例では、スレッドの数を2に設定する方法を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:CICompilerCount=2\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:CodeCacheMinimumFreeSpace=\fIsize\fR
+.RS 4
+コンパイルに必要な最小空き領域(バイト単位)を設定します。キロバイトを示す場合は文字\fBk\fRまたは\fBK\fR、メガバイトを示す場合は文字\fBm\fRまたは\fBM\fR、ギガバイトを示す場合は文字\fBg\fRまたは\fBG\fRを追加します。最小空き領域より少ない領域しか残っていない場合、コンパイルは停止します。デフォルトでは、このオプションは500KBに設定されています。次の例では、最小空き領域を1024MBに設定する方法を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:CodeCacheMinimumFreeSpace=1024m\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:CompileCommand=\fIcommand\fR,\fImethod\fR[,\fIoption\fR]
+.RS 4
+メソッドで実行するコマンドを指定します。たとえば、コンパイル元から\fBString\fRクラスの\fBindexOf()\fRメソッドを実行するには、次を使用します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:CompileCommand=exclude,java/lang/String\&.indexOf\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+スラッシュ(\fB/\fR)で区切られたすべてのパッケージおよびサブパッケージを含む、完全クラス名を指定します。切取りと貼付けの操作を容易にするために、\fB\-XX:+PrintCompilation\fRオプションおよび\fB\-XX:+LogCompilation\fRオプションによって生成されるメソッド名の形式を使用することもできます。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:CompileCommand=exclude,java\&.lang\&.String::indexOf\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+署名なしでメソッドを指定すると、コマンドは指定した名前を持つすべてのメソッドに適用されます。ただし、クラス・ファイル形式でメソッドの署名を指定することもできます。この場合、引数を引用符で囲む必要があり、囲まないと、シェルによりセミコロンがコマンドの終了として扱われます。たとえば、コンパイル元から\fBString\fRクラスの\fBindexOf(String)\fRメソッドのみ除外するには、次を使用します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:CompileCommand="exclude,java/lang/String\&.indexOf,(Ljava/lang/String;)I"\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+また、クラス名およびメソッド名にワイルドカードとしてアスタリスク(*)を使用できます。たとえば、コンパイル元からすべてのクラスのすべての\fBindexOf()\fRメソッドを除外するには、次を使用します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:CompileCommand=exclude,*\&.indexOf\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+カンマとピリオドは空白の別名で、これにより、シェルを介してコンパイラ・コマンドを渡すことが容易になります。引数を引用符で囲むことで、空白をセパレータとして使用して\fB\-XX:CompileCommand\fRに引数を渡すことができます。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:CompileCommand="exclude java/lang/String indexOf"\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+\fB\-XX:CompileCommand\fRオプションを使用してコマンド行で渡されたコマンドを解析した後に、JITコンパイラは\fB\&.hotspot_compiler\fRファイルからコマンドを読み取ります。このファイルにコマンドを追加するか、または\fB\-XX:CompileCommandFile\fRオプションを使用して別のファイルを指定することができます。
+.sp
+複数のコマンドを追加するには、\fB\-XX:CompileCommand\fRオプションを複数回指定するか、または改行セパレータ(\fB\en\fR)を使用して各引数を区切ります。次のコマンドを使用できます。
+.PP
+break
+.RS 4
+指定したメソッドのコンパイルの最初に停止するために、JVMのデバッグ時のブレークポイントを設定します。
+.RE
+.PP
+compileonly
+.RS 4
+指定したメソッドを除いたすべてのメソッドを、コンパイルから除外します。別の方法として、\fB\-XX:CompileOnly\fRオプションを使用して複数のメソッドを指定できます。
+.RE
+.PP
+dontinline
+.RS 4
+指定したメソッドをインライン化しないようにします。
+.RE
+.PP
+exclude
+.RS 4
+指定したメソッドをコンパイルから除外します。
+.RE
+.PP
+help
+.RS 4
+\fB\-XX:CompileCommand\fRオプションのヘルプ・メッセージを印刷します。
+.RE
+.PP
+inline
+.RS 4
+指定したメソッドをインライン化しようとします。
+.RE
+.PP
+log
+.RS 4
+指定したメソッドを除くすべてのメソッドに対して、(\fB\-XX:+LogCompilation\fRオプションを使用して)コンパイル・ロギングを除外します。デフォルトでは、コンパイルされたすべてのメソッドにロギングが実行されます。
+.RE
+.PP
+option
+.RS 4
+このコマンドは、最後の引数(\fIoption\fR)のかわりに、指定したメソッドにJITコンパイル・オプションを渡すために使用できます。コンパイル・オプションは、メソッド名の後の末尾に設定されます。たとえば、\fBStringBuffer\fRクラスの\fBappend()\fRメソッドに対して\fBBlockLayoutByFrequency\fRオプションを有効にするには、次を使用します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:CompileCommand=option,java/lang/StringBuffer\&.append,BlockLayoutByFrequency\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+カンマまたは空白で区切って、複数のコンパイル・オプションを指定できます。
+.RE
+.PP
+print
+.RS 4
+指定したメソッドのコンパイル後に生成されたアセンブラ・コードを出力します。
+.RE
+.PP
+quiet
+.RS 4
+コンパイル・コマンドを出力しません。デフォルトでは、\fB\-XX:CompileCommand\fRオプションを使用して指定したコマンドが出力されます。たとえば、\fBString\fRクラスの\fBindexOf()\fRメソッドのコンパイルから除外する場合、次が標準出力に出力されます。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBCompilerOracle: exclude java/lang/String\&.indexOf\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+他の\fB\-XX:CompileCommand\fRオプションの前に\fB\-XX:CompileCommand=quiet\fRオプションを指定することによって、これを抑制できます。
+.RE
+.RE
+.PP
+\-XX:CompileCommandFile=\fIfilename\fR
+.RS 4
+JITコンパイラ・コマンドの読取り元のファイルを設定します。デフォルトでは、JITコンパイラによって実行されるコマンドを格納するために、\fB\&.hotspot_compiler\fRファイルが使用されます。
+.sp
+コマンド・ファイルの各行は、コマンドが使用されるコマンド、クラス名およびメソッド名を表します。たとえば、次の行は、\fBString\fRクラスの\fBtoString()\fRメソッドに対してアセンブリ・コードを出力します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBprint java/lang/String toString\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+メソッドで実行するJITコンパイラのコマンドの指定の詳細は、\fB\-XX:CompileCommand\fRオプションを参照してください。
+.RE
+.PP
+\-XX:CompileOnly=\fImethods\fR
+.RS 4
+コンパイルを制限する(カンマで区切られた)メソッドのリストを設定します。指定したメソッドのみがコンパイルされます。完全クラス名(パッケージおよびサブパッケージを含む)で各メソッドを指定します。たとえば、\fBString\fRクラスの\fBlength()\fRメソッドおよび\fBList\fRクラスの\fBsize()\fRメソッドのみをコンパイルするには、次を使用します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:CompileOnly=java/lang/String\&.length,java/util/List\&.size\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+スラッシュ(\fB/\fR)で区切られたすべてのパッケージおよびサブパッケージを含む、完全クラス名を指定します。切取りと貼付けの操作を容易にするために、\fB\-XX:+PrintCompilation\fRオプションおよび\fB\-XX:+LogCompilation\fRオプションによって生成されるメソッド名の形式を使用することもできます。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:CompileOnly=java\&.lang\&.String::length,java\&.util\&.List::size\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+ワイルドカードはサポートされていませんが、クラス名またはパッケージ名だけを指定してクラスまたはパッケージのすべてのメソッドをコンパイルすることも、メソッドだけを指定して任意のクラスのこの名前を持つメソッドをコンパイルすることもできます。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:CompileOnly=java/lang/String\fR
+\fB\-XX:CompileOnly=java/lang\fR
+\fB\-XX:CompileOnly=\&.length\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:CompileThreshold=\fIinvocations\fR
+.RS 4
+コンパイル前に解釈されたメソッド呼出しの数を設定します。デフォルトでは、サーバーJVMでは、JITコンパイラは、10,000の解釈されたメソッド呼出しを実行して、効率的なコンパイルのための情報を収集します。クライアントJVMの場合、デフォルト設定は1,500呼出しです。層コンパイルが有効な場合、このオプションは無視されます。オプション\fB\-XX:+TieredCompilation\fRを参照してください。次の例では、解釈されたメソッド呼出しの数を5,000に設定する方法を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:CompileThreshold=5000\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+\fB\-Xcomp\fRオプションを指定して、コンパイルの前に、Javaメソッドの解釈を完全に無効にすることができます。
+.RE
+.PP
+\-XX:+DoEscapeAnalysis
+.RS 4
+エスケープ分析の使用を有効にします。このオプションはデフォルトで有効になっています。エスケープ分析の使用を無効にするには、\fB\-XX:\-DoEscapeAnalysis\fRを指定します。Java HotSpot Server VMのみが、このオプションをサポートしています。
+.RE
+.PP
+\-XX:InitialCodeCacheSize=\fIsize\fR
+.RS 4
+初期コード・キャッシュ・サイズ(バイト単位)を設定します。キロバイトを示す場合は文字\fBk\fRまたは\fBK\fR、メガバイトを示す場合は文字\fBm\fRまたは\fBM\fR、ギガバイトを示す場合は文字\fBg\fRまたは\fBG\fRを追加します。デフォルト値は500KBに設定されています。初期コード・キャッシュ・サイズをシステムの最小メモリー・ページ・サイズより小さくしないでください。次の例では、初期コード・キャッシュ・サイズを32KBに設定する方法を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:InitialCodeCacheSize=32k\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:+Inline
+.RS 4
+メソッドのインライン化を有効にします。このオプションは、パフォーマンスを向上させるためにデフォルトで有効になっています。メソッドのインライン化を無効にするには、\fB\-XX:\-Inline\fRを指定します。
+.RE
+.PP
+\-XX:InlineSmallCode=\fIsize\fR
+.RS 4
+インライン化が必要なコンパイルされたメソッドの最大コード・サイズ(バイト単位)を設定します。キロバイトを示す場合は文字\fBk\fRまたは\fBK\fR、メガバイトを示す場合は文字\fBm\fRまたは\fBM\fR、ギガバイトを示す場合は文字\fBg\fRまたは\fBG\fRを追加します。指定したサイズより小さいサイズのコンパイルされたメソッドのみが、インライン化されます。デフォルトでは、最大コード・サイズは1000バイトに設定されています。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:InlineSmallCode=1000\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:+LogCompilation
+.RS 4
+現在の作業ディレクトリにある\fBhotspot\&.log\fRという名前のファイルへのコンパイル・アクティビティのロギングを有効にします。\fB\-XX:LogFile\fRオプションを使用して、異なるログ・ファイル・パスと名前を指定できます。
+.sp
+デフォルトでは、このオプションは無効であり、コンパイル・アクティビティは記録されません。\fB\-XX:+LogCompilation\fRオプションは、診断JVMオプションのロックを解除する\fB\-XX:UnlockDiagnosticVMOptions\fRオプションとともに使用する必要があります。
+.sp
+\fB\-XX:+PrintCompilation\fRオプションを使用して、メソッドをコンパイルするたびに、コンソールに出力されたメッセージを含む詳細な診断出力を有効化できます。
+.RE
+.PP
+\-XX:MaxInlineSize=\fIsize\fR
+.RS 4
+インライン化するメソッドの最大バイトコード・サイズ(バイト単位)を設定します。キロバイトを示す場合は文字\fBk\fRまたは\fBK\fR、メガバイトを示す場合は文字\fBm\fRまたは\fBM\fR、ギガバイトを示す場合は文字\fBg\fRまたは\fBG\fRを追加します。デフォルトでは、最大バイトコード・サイズは35バイトに設定されています。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:MaxInlineSize=35\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:MaxNodeLimit=\fInodes\fR
+.RS 4
+単一のメソッドのコンパイル時に使用されるノードの最大数を設定します。デフォルトでは、ノードの最大数は65,000に設定されています。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:MaxNodeLimit=65000\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:MaxTrivialSize=\fIsize\fR
+.RS 4
+インライン化する単純メソッドの最大バイトコード・サイズ(バイト単位)を設定します。キロバイトを示す場合は文字\fBk\fRまたは\fBK\fR、メガバイトを示す場合は文字\fBm\fRまたは\fBM\fR、ギガバイトを示す場合は文字\fBg\fRまたは\fBG\fRを追加します。デフォルトでは、単純メソッドの最大バイトコード・サイズは6バイトに設定されています。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:MaxTrivialSize=6\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:+OptimizeStringConcat
+.RS 4
+\fBString\fR連結操作の最適化を有効にします。このオプションはデフォルトで有効になっています。\fBString\fR連結操作の最適化を無効にするには、\fB\-XX:\-OptimizeStringConcat\fRを指定します。Java HotSpot Server VMのみが、このオプションをサポートしています。
+.RE
+.PP
+\-XX:+PrintAssembly
+.RS 4
+外部の\fBdisassembler\&.so\fRライブラリを使用して、バイトコード化されたネイティブのメソッドのアセンブリ・コードの出力を有効にします。これにより、生成されたコードを表示することができ、パフォーマンスの問題の診断に役立ちます。
+.sp
+デフォルトでは、このオプションは無効であり、アセンブリ・コードは印刷されません。\fB\-XX:+PrintAssembly\fRオプションは、診断JVMオプションのロックを解除する\fB\-XX:UnlockDiagnosticVMOptions\fRオプションとともに使用する必要があります。
+.RE
+.PP
+\-XX:+PrintCompilation
+.RS 4
+メソッドをコンパイルするたびに、コンソールにメッセージを出力することによって、JVMからの詳細な診断出力を有効にします。これにより、実際にコンパイルされるメソッドを確認できます。デフォルトでは、このオプションは無効であり、診断出力は印刷されません。
+.sp
+\fB\-XX:+LogCompilation\fRオプションを使用して、コンパイル・アクティビティをファイルに記録することもできます。
+.RE
+.PP
+\-XX:+PrintInlining
+.RS 4
+インライン化の決定内容の出力を有効にします。これにより、インライン化されるメソッドを確認できます。
+.sp
+デフォルトでは、このオプションは無効であり、インライン化情報は出力されません。\fB\-XX:+PrintInlining\fRオプションは、診断JVMオプションのロックを解除する\fB\-XX:+UnlockDiagnosticVMOptions\fRオプションとともに使用する必要があります。
+.RE
+.PP
+\-XX:ReservedCodeCacheSize=\fIsize\fR
+.RS 4
+JITコンパイルされたコードの最大コード・キャッシュ・サイズ(バイト単位)を設定します。キロバイトを示す場合は文字\fBk\fRまたは\fBK\fR、メガバイトを示す場合は文字\fBm\fRまたは\fBM\fR、ギガバイトを示す場合は文字\fBg\fRまたは\fBG\fRを追加します。このオプションは2GBの制限があります。そうでない場合は、エラーが生成されます。最大コード・キャッシュ・サイズを初期コード・キャッシュ・サイズより小さくしないでください。\fB\-XX:InitialCodeCacheSize\fRオプションを参照してください。このオプションは\fB\-Xmaxjitcodesize\fRと同等です。
+.RE
+.PP
+\-XX:RTMAbortRatio=\fIabort_ratio\fR
+.RS 4
+RTM中止率は、すべての実行済RTMトランザクションに対するパーセンテージ(%)として指定されます。中止されたトランザクション数がこの率を超えた場合、コンパイルされたコードが非最適化されます。この率は、\fB\-XX:+UseRTMDeopt\fRオプションが有効な場合に使用されます。このオプションのデフォルト値は50です。つまり、すべてのトランザクションの50%が中止された場合、コンパイルされたコードが非最適化されます。
+.RE
+.PP
+\-XX:RTMRetryCount=\fInumber_of_retries\fR
+.RS 4
+中止またはビジーの場合、RTMロック・コードは、標準のロック・メカニズムにフォールバックする前にこのオプションによって指定された回数再試行されます。このオプションのデフォルト値は5です。\fB\-XX:UseRTMLocking\fRオプションを有効化する必要があります。
+.RE
+.PP
+\-XX:+TieredCompilation
+.RS 4
+層コンパイルの使用を有効にします。デフォルトでは、このオプションは有効になっています。Java HotSpot Server VMのみが、このオプションをサポートしています。
+.RE
+.PP
+\-XX:+UseAES
+.RS 4
+Intel、AMDおよびSPARCハードウェアに対して、ハードウェアベースのAES組込みを有効化します。Intel Westmere (2010以降)、AMD Bulldozer (2011以降)およびSPARC (T4以降)が、サポートされているハードウェアです。UseAESは、UseAESIntrinsicsとともに使用します。
+.RE
+.PP
+\-XX:+UseAESIntrinsics
+.RS 4
+UseAESとUseAESIntrinsicsフラグはデフォルトで有効化されており、Java HotSpot Server VM 32ビットおよび64ビットに対してのみサポートされています。ハードウェアベースのAES組込みを無効化するには、\fB\-XX:\-UseAES \-XX:\-UseAESIntrinsics\fRを指定します。たとえば、ハードウェアAESを有効化するには、次のフラグを使用します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:+UseAES \-XX:+UseAESIntrinsics\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+32ビットおよび64ビットに対してUseAESおよびUseAESIntrinsicsフラグをサポートするには、\fB\-server\fRオプションを使用してJava HotSpot Server VMを選択します。これらのフラグは、クライアントVMではサポートされていません。
+.RE
+.PP
+\-XX:+UseCodeCacheFlushing
+.RS 4
+コンパイラをシャットダウンする前に、コード・キャッシュのフラッシュを有効にします。このオプションはデフォルトで有効になっています。コンパイラをシャットダウンする前にコード・キャッシュのフラッシュを無効にするには\fB\-XX:\-UseCodeCacheFlushing\fRを指定します。
+.RE
+.PP
+\-XX:+UseCondCardMark
+.RS 4
+カード表の更新前に、カードがすでにマークされているかどうかのチェックを有効にします。このオプションは、デフォルトでは無効になっており、複数のソケットを持つマシン上でのみ使用する必要があります。これにより、同時操作にかなり依存しているJavaアプリケーションのパフォーマンスが向上します。Java HotSpot Server VMのみが、このオプションをサポートしています。
+.RE
+.PP
+\-XX:+UseRTMDeopt
+.RS 4
+中止率に応じて、RTMロックを自動調整します。この率は、\fB\-XX:RTMAbortRatio\fRオプションによって指定されます。中止されたトランザクション数が中止率を超えた場合、ロックを含むメソッドがすべてのロックで標準のロックとして非最適化および再コンパイルされます。このオプションは、デフォルトでは無効になっています。\fB\-XX:+UseRTMLocking\fRオプションを有効化する必要があります。
+.RE
+.PP
+\-XX:+UseRTMLocking
+.RS 4
+フォールバック・ハンドラとして標準のロック・メカニズムを使用して、展開されたすべてのロックに対してRestricted Transactional Memory (RTM)ロック・コードを生成します。このオプションは、デフォルトでは無効になっています。RTMに関連するオプションは、Transactional Synchronization Extensions (TSX)をサポートするx86 CPU上のJava HotSpot Server VMに対してのみ使用可能です。
+.sp
+RTMは、x86命令セット拡張でマルチスレッド・アプリケーションの作成を容易にするIntelのTSXの一部です。RTMでは、新しい命令
+\fBXBEGIN\fR、\fBXABORT\fR、\fBXEND\fRおよび\fBXTEST\fRが導入されています。\fBXBEGIN\fRおよび\fBXEND\fR命令は、トランザクションとして実行するための命令セットを囲みます。トランザクションの実行時に競合が見つからなかった場合、メモリーとレジスタの変更が、\fBXEND\fR命令で同時にコミットされます。\fBXABORT\fR命令ではトランザクションを明示的に中止でき、\fBXEND\fR命令では命令セットがトランザクション内で実行中かどうかを確認できます。
+.sp
+トランザクションのロックは、別のスレッドが同じトランザクションにアクセスしようとしたときに展開されます。したがって、そのトランザクションへのアクセスを最初にリクエストしなかったスレッドはブロックされます。RTMでは、トランザクションが中止または失敗した場合のために、フォールバックの操作セットを指定する必要があります。RTMロックとは、TSXのシステムに委譲されているロックです。
+.sp
+RTMにより、重要なリージョンにおいて衝突が少なく競合度の高いロックのパフォーマンスが向上されます(これは、複数のスレッドによって同時にアクセスできないコードです)。また、RTMにより、粗粒度ロックのパフォーマンスも向上されますが、一般的にマルチスレッド・アプリケーションでのパフォーマンスはよくありません。(粗粒度ロックとは、ロックの取得および解放のオーバーヘッドを最小化するために長い期間ロックを保持する戦略であり、一方、細粒度ロックとは必要な場合のみロックし可能なかぎり早期にロック解除することで最大限の並行処理の達成を試みる戦略です。)さらに、異なるスレッドによって使用されている軽度な競合ロックの場合、RTMにより、誤ったキャッシュ・ライン共有(キャッシュ・ライン・ピンポンとも呼ばれる)を削減できます。これは、異なるプロセッサからの複数のスレッドが異なるリソースにアクセスしている場合に発生しますが、リソースは同じキャッシュ・ラインを共有します。結果として、プロセッサは他のプロセッサのキャッシュ・ラインを繰り返し無効にし、これにより、キャッシュではなくメイン・メモリーからの読取りが強制されます。
+.RE
+.PP
+\-XX:+UseSHA
+.RS 4
+SPARCハードウェアのSHA暗号化ハッシュ関数のハードウェアベースの組込みを有効にします。\fBUseSHA\fRは、\fBUseSHA1Intrinsics\fR、\fBUseSHA256Intrinsics\fRおよび\fBUseSHA512Intrinsics\fRオプションと組み合せて使用します。
+.sp
+\fBUseSHA\fRおよび\fBUseSHA*Intrinsics\fRフラグはデフォルトで有効であり、SPARC T4以上のJava HotSpot Server VM 64ビットでのみサポートされます。
+.sp
+SHA操作に対して\fBsun\&.security\&.provider\&.Sun\fRプロバイダを使用する場合のみ、この機能を適用できます。
+.sp
+すべてのハードウェアベースのSHA組込みを無効化するには、\fB\-XX:\-UseSHA\fRを指定してください。特定のSHA組込みのみ無効化するには、適切な対応するオプションを使用してください。たとえば、\fB\-XX:\-UseSHA256Intrinsics\fRなどです。
+.RE
+.PP
+\-XX:+UseSHA1Intrinsics
+.RS 4
+SHA\-1暗号化ハッシュ関数の組込みを有効にします。
+.RE
+.PP
+\-XX:+UseSHA256Intrinsics
+.RS 4
+SHA\-224およびSHA\-256暗号化ハッシュ関数の組込みを有効にします。
+.RE
+.PP
+\-XX:+UseSHA512Intrinsics
+.RS 4
+SHA\-384およびSHA\-512暗号化ハッシュ関数の組込みを有効にします。
+.RE
+.PP
+\-XX:+UseSuperWord
+.RS 4
+スカラー演算のスーパーワード演算への変換を有効にします。このオプションはデフォルトで有効になっています。スカラー演算のスーパーワード演算への変換を無効にするには、\fB\-XX:\-UseSuperWord\fRを指定します。Java HotSpot Server VMのみが、このオプションをサポートしています。
+.RE
+.SS "高度なサービスアビリティ・オプション"
+.PP
+これらのオプションは、システム情報を収集し、詳細なデバッグを実行する機能を提供します。
+.PP
+\-XX:+ExtendedDTraceProbes
+.RS 4
+パフォーマンスに影響を与える追加の\fBdtrace\fRツール・プローブを有効にします。デフォルトでは、このオプションは無効になっており、\fBdtrace\fRは標準プローブのみを実行します。
+.RE
+.PP
+\-XX:+HeapDumpOnOutOfMemory
+.RS 4
+\fBjava\&.lang\&.OutOfMemoryError\fR例外がスローされた場合に、ヒープ・プロファイラ(HPROF)を使用して、現在のディレクトリ内のファイルへのJavaヒープのダンプを有効にします。\fB\-XX:HeapDumpPath\fRオプションを使用して、ヒープ・ダンプ・ファイルのパスおよび名前を明示的に設定できます。デフォルトでは、このオプションは無効であり、\fBOutOfMemoryError\fR例外がスローされた場合にヒープはダンプされません。
+.RE
+.PP
+\-XX:HeapDumpPath=\fIpath\fR
+.RS 4
+\fB\-XX:+HeapDumpOnOutOfMemoryError\fRオプションが設定されている場合、ヒープ・プロファイラ(HPROF)が提供するヒープ・ダンプを書き込むパスおよびファイル名を設定します。デフォルトでは、このファイルは、現在の作業ディレクトリに作成され、名前は\fBjava_pid\fR\fIpid\fR\fB\&.hprof\fR
+(\fIpid\fRはエラーの原因となったプロセスの識別子)になります。次の例では、デフォルトのファイルを明示的に設定する方法を示します(\fB%p\fRは現在のプロセスの識別子を表します)。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:HeapDumpPath=\&./java_pid%p\&.hprof\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+次の例では、ヒープ・ダンプ・ファイルを\fB/var/log/java/java_heapdump\&.hprof\fRに設定する方法を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:HeapDumpPath=/var/log/java/java_heapdump\&.hprof\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:LogFile=\fIpath\fR
+.RS 4
+ログ・データが書き込まれるパスおよびファイル名を設定します。デフォルトでは、ファイルは現在の作業ディレクトリに作成され、名前は\fBhotspot\&.log\fRです。
+.sp
+次の例では、ログ・ファイルを\fB/var/log/java/hotspot\&.log\fRに設定する方法を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:LogFile=/var/log/java/hotspot\&.log\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:+PrintClassHistogram
+.RS 4
+\fB[Control]+[C]\fRイベント(\fBSIGTERM\fR)後にクラス・インスタンスのヒストグラムの印刷を有効にします。デフォルトでは、このオプションは無効です。
+.sp
+このオプションを設定すると、\fBjmap \-histo\fRコマンド、または\fBjcmd \fR\fIpid\fR\fB GC\&.class_histogram\fRコマンド(\fIpid\fRは現在のJavaプロセスの識別子)を実行する場合と同じになります。
+.RE
+.PP
+\-XX:+PrintConcurrentLocks
+.RS 4
+印刷を有効にします ロック(次の後) \- イベント。デフォルトでは、このオプションは無効です。
+.sp
+\fB[Control]+[C]\fRイベント(\fBSIGTERM\fR)後に\fBjava\&.util\&.concurrent\fRロックの印刷を有効にします。デフォルトでは、このオプションは無効です。
+.sp
+このオプションを設定すると、\fBjstack \-l\fRコマンド、または\fBjcmd \fR\fIpid\fR\fB Thread\&.print \-l\fRコマンド(\fIpid\fRは現在のJavaプロセスの識別子)を実行する場合と同じになります。
+.RE
+.PP
+\-XX:+UnlockDiagnosticVMOptions
+.RS 4
+JVMの診断を目的としたオプションをアンロックします。デフォルトでは、このオプションは無効であり、診断オプションは使用できません。
+.RE
+.SS "高度なガベージ・コレクション・オプション"
+.PP
+これらのオプションは、ガベージ・コレクション(GC)がJava HotSpot VMによってどのように実行されるかを制御します。
+.PP
+\-XX:+AggressiveHeap
+.RS 4
+Javaヒープの最適化を有効にします。これにより、コンピュータの構成(RAMおよびCPU)に基づいて、様々なパラメータが、メモリー割当てが集中した長時間実行ジョブに最適になるように設定されます。デフォルトでは、このオプションは無効であり、ヒープは最適化されません。
+.RE
+.PP
+\-XX:+AlwaysPreTouch
+.RS 4
+JVMの初期化中にJavaヒープ上のすべてのページのタッチを有効にします。これにより、\fBmain()\fRメソッドの入力前に、すべてのページがメモリーに取得されます。このオプションは、物理メモリーにマップされたすべての仮想メモリーを含む長時間実行のシステムをシミュレートするテストで使用できます。デフォルトでは、このオプションは無効になっており、JVMヒープ領域がいっぱいになると、すべてのページがコミットされます。
+.RE
+.PP
+\-XX:+CMSClassUnloadingEnabled
+.RS 4
+並行マークスイープ(CMS)ガベージ・コレクタを使用する場合に、アンロードするクラスを有効にします。このオプションはデフォルトで有効になっています。CMSガベージ・コレクタのクラス・アンロードを無効にするには、\fB\-XX:\-CMSClassUnloadingEnabled\fRを指定します。
+.RE
+.PP
+\-XX:CMSExpAvgFactor=\fIpercent\fR
+.RS 4
+並行コレクション統計の指数平均を計算する際に、現在のサンプルを重み付けするために使用される時間の割合(0から100まで)を設定します。デフォルトでは、指数平均係数は25%に設定されています。次の例では、係数を15%に設定する方法を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:CMSExpAvgFactor=15\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:CMSInitiatingOccupancyFraction=\fIpercent\fR
+.RS 4
+CMS収集サイクルを開始する古い世代の占有率(0から100まで)を設定します。デフォルト値は\-1に設定されています。負の値(デフォルトを含む)は、\fB\-XX:CMSTriggerRatio\fRが開始占有率の値を定義するために使用されることを意味します。
+.sp
+次の例では、占有率を20%に設定する方法を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:CMSInitiatingOccupancyFraction=20\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:+CMSScavengeBeforeRemark
+.RS 4
+CMSコメント・ステップの前にスカベンジの試行を有効にします。デフォルトでは、このオプションは無効です。
+.RE
+.PP
+\-XX:CMSTriggerRatio=\fIpercent\fR
+.RS 4
+CMS収集サイクルが開始する前に割り当てられる\fB\-XX:MinHeapFreeRatio\fRによって指定される値の割合(0から100まで)を設定します。デフォルト値は80%に設定されています。
+.sp
+次の例では、占有率を75%に設定する方法を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:CMSTriggerRatio=75\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:ConcGCThreads=\fIthreads\fR
+.RS 4
+並行GCに使用されるスレッドの数を設定します。デフォルト値は、JVMに使用できるCPUの数によって異なります。
+.sp
+たとえば、並行GCのスレッド数を2に設定するには、次のオプションを指定します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:ConcGCThreads=2\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:+DisableExplicitGC
+.RS 4
+\fBSystem\&.gc()\fRの呼出しの処理を無効にするオプションを有効にします。このオプションはデフォルトで無効になっており、これは\fBSystem\&.gc()\fRへの呼出しが処理されることを意味します。\fBSystem\&.gc()\fRの呼出しの処理が無効になっている場合、JVMは必要に応じてGCを実行します。
+.RE
+.PP
+\-XX:+ExplicitGCInvokesConcurrent
+.RS 4
+\fBSystem\&.gc()\fRリクエストを使用することによって、並行GCの呼出しを有効にします。このオプションはデフォルトで無効になっており、\fB\-XX:+UseConcMarkSweepGC\fRオプションとともに使用する場合のみ、有効にすることができます。
+.RE
+.PP
+\-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses
+.RS 4
+\fBSystem\&.gc()\fRリクエストを使用し、並行GCサイクル中にクラスをアンロードすることによって、並行GCの呼出しを有効にします。このオプションはデフォルトで無効になっており、\fB\-XX:+UseConcMarkSweepGC\fRオプションとともに使用する場合のみ、有効にすることができます。
+.RE
+.PP
+\-XX:G1HeapRegionSize=\fIsize\fR
+.RS 4
+ガベージファースト(G1)コレクタを使用する際にJavaヒープを細分化するリージョンのサイズを設定します。値には、1MBから32MBまでを指定できます。デフォルトのリージョン・サイズは、ヒープ・サイズに基づいて人間工学的に決定されます。
+.sp
+次の例では、細分化されたサイズを16MBに設定する方法を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:G1HeapRegionSize=16m\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:+G1PrintHeapRegions
+.RS 4
+割り当てられたリージョンおよびG1コレクタによって再要求されたものに関する情報の印刷を有効にします。デフォルトでは、このオプションは無効です。
+.RE
+.PP
+\-XX:G1ReservePercent=\fIpercent\fR
+.RS 4
+G1コレクタの昇格が失敗する可能性を減らすためのfalseの上限として予約されたヒープの割合(0から50まで)を設定します。デフォルトでは、このオプションは10%に設定されています。
+.sp
+次の例では、予約されたヒープを20%に設定する方法を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:G1ReservePercent=20\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:InitialHeapSize=\fIsize\fR
+.RS 4
+メモリー割当てプールの初期サイズ(バイト単位)を設定します。指定する値は、0、または1MBより大きい1024の倍数のいずれかにする必要があります。キロバイトを示す場合は文字\fBk\fRまたは\fBK\fR、メガバイトを示す場合は文字\fBm\fRまたは\fBM\fR、ギガバイトを示す場合は文字\fBg\fRまたは\fBG\fRを追加します。デフォルト値は、実行時にシステム構成に基づいて選択されます。http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/gctuning/index\&.htmlの\fIJava SE HotSpot仮想マシンのガベージ・コレクション・チューニング・ガイド\fRのエルゴノミクスに関する項を参照してください。
+.sp
+次の例では、割り当てられたメモリーのサイズを様々な単位を使用して6MBに設定する方法を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:InitialHeapSize=6291456\fR
+\fB\-XX:InitialHeapSize=6144k\fR
+\fB\-XX:InitialHeapSize=6m\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+このオプションを0に設定した場合、初期サイズは、古い世代と若い世代に割り当てられたサイズの合計として設定されます。若い世代のヒープのサイズは、\fB\-XX:NewSize\fRオプションを使用して設定できます。
+.RE
+.PP
+\-XX:InitialSurvivorRatio=\fIratio\fR
+.RS 4
+スループット・ガベージ・コレクタが使用するサバイバ領域の初期比を設定します(\fB\-XX:+UseParallelGC\fRおよび/または\fB\-XX:+UseParallelOldGC\fRオプションによって有効になります)。\fB\-XX:+UseParallelGC\fRオプションおよび\fB\-XX:+UseParallelOldGC\fRオプションを使用することによって、スループット・ガベージ・コレクタで適応サイズ指定をデフォルトで有効にします。初期値から始めて、アプリケーションの動作に従って、サバイバ領域がサイズ変更されます。(\fB\-XX:\-UseAdaptiveSizePolicy\fRオプションを使用して)適応サイズ指定を無効にした場合、\fB\-XX:SurvivorRatio\fRオプションを使用して、アプリケーションの実行全体のサバイバ領域のサイズを設定する必要があります。
+.sp
+次の式を使用して、若い世代のサイズ(Y)およびサバイバ領域の初期比(R)に基づいて、サバイバ領域の初期サイズ(S)を計算できます。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBS=Y/(R+2)\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+等式内の2は、2つのサバイバ領域を示します。サバイバ領域の初期比に指定する値を大きくすると、サバイバ領域の初期サイズは小さくなります。
+.sp
+デフォルトでは、サバイバ領域の初期比は8に設定されています。若い世代の領域サイズのデフォルト値(2MB)を使用した場合、サバイバ領域の初期サイズは0\&.2MBになります。
+.sp
+次の例では、サバイバ領域の初期比を4に設定する方法を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:InitialSurvivorRatio=4\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:InitiatingHeapOccupancyPercent=\fIpercent\fR
+.RS 4
+並行GCサイクルを開始するヒープ占有率(0から100まで)を設定します。これは、1つの世代のみ(たとえばG1ガベージ・コレクタなど)ではなく、ヒープ全体の占有に基づいて並行GCサイクルをトリガーするガベージ・コレクタによって使用されます。
+.sp
+デフォルトでは、開始値は45%に設定されています。値0は、GCサイクルが停止しないことを意味します。次の例では、開始ヒープ占有率を75%に設定する方法を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:InitiatingHeapOccupancyPercent=75\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:MaxGCPauseMillis=\fItime\fR
+.RS 4
+最大GC休止時間(ミリ秒単位)のターゲットを設定します。これはソフト・ゴールのため、JVMは実現のために最善の努力をします。デフォルトでは、休止時間の最大値はありません。
+.sp
+次の例では、最大ターゲット休止時間を500ミリ秒に設定する方法を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:MaxGCPauseMillis=500\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:MaxHeapSize=\fIsize\fR
+.RS 4
+メモリー割当てプールの最大サイズ(バイト単位)を設定します。指定する値は、2MBより大きい1024の倍数にする必要があります。キロバイトを示す場合は文字\fBk\fRまたは\fBK\fR、メガバイトを示す場合は文字\fBm\fRまたは\fBM\fR、ギガバイトを示す場合は文字\fBg\fRまたは\fBG\fRを追加します。デフォルト値は、実行時にシステム構成に基づいて選択されます。サーバー・デプロイメントでは、\fB\-XX:InitialHeapSize\fRおよび\fB\-XX:MaxHeapSize\fRは通常同じ値に設定されます。http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/gctuning/index\&.htmlの\fIJava SE HotSpot仮想マシンのガベージ・コレクション・チューニング・ガイド\fRのエルゴノミクスに関する項を参照してください。
+.sp
+次の例では、割り当てられたメモリーの許可される最大サイズを様々な単位を使用して80MBに設定する方法を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:MaxHeapSize=83886080\fR
+\fB\-XX:MaxHeapSize=81920k\fR
+\fB\-XX:MaxHeapSize=80m\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+Oracle Solaris 7およびOracle Solaris 8 SPARCプラットフォームの場合のこの値の上限は、およそ4,000MBからオーバーヘッドの量を引いたものです。Oracle Solaris 2\&.6およびx86プラットフォームの場合の上限は、およそ2,000MBからオーバーヘッドの量を引いたものです。Linuxプラットフォームの場合の上限は、およそ2,000MBからオーバーヘッドの量を引いたものです。
+.sp
+\fB\-XX:MaxHeapSize\fRオプションは\fB\-Xmx\fRと同等です。
+.RE
+.PP
+\-XX:MaxHeapFreeRatio=\fIpercent\fR
+.RS 4
+GCイベント後の空きヒープ領域の許可されている最大の割合(0から100まで)を設定します。空きヒープ領域がこの値を超えて拡大した場合、そのヒープは縮小します。デフォルトでは、この値は70%に設定されています。
+.sp
+次の例では、空きヒープの最大比率を75%に設定する方法を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:MaxHeapFreeRatio=75\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:MaxMetaspaceSize=\fIsize\fR
+.RS 4
+クラス・メタデータに割り当てることができるネイティブ・メモリーの最大量を設定します。デフォルトでは、このサイズは制限されていません。アプリケーションのメタデータの量は、アプリケーション自体、他の実行中アプリケーション、およびシステムで使用可能なメモリーの量によって異なります。
+.sp
+次の例では、クラス・メタデータの最大サイズを256MBに設定する方法を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:MaxMetaspaceSize=256m\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:MaxNewSize=\fIsize\fR
+.RS 4
+若い世代(ナーサリ)のヒープの最大サイズ(バイト単位)を設定します。デフォルト値は人間工学的に設定されます。
+.RE
+.PP
+\-XX:MaxTenuringThreshold=\fIthreshold\fR
+.RS 4
+適応GCサイズ指定で使用する最大殿堂入りしきい値を設定します。最大値は15です。デフォルト値は、パラレル(スループット)コレクタの場合は15、CMSコレクタの場合は6です。
+.sp
+次の例では、最大殿堂入りしきい値を10に設定する方法を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:MaxTenuringThreshold=10\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:MetaspaceSize=\fIsize\fR
+.RS 4
+最初に超えたときにガベージ・コレクションをトリガーする、割り当てられたクラス・メタデータ領域のサイズを設定します。このガベージ・コレクションのしきい値は、使用されるメタデータの量によって増加または減少します。デフォルトのサイズはプラットフォームによって異なります。
+.RE
+.PP
+\-XX:MinHeapFreeRatio=\fIpercent\fR
+.RS 4
+GCイベント後の空きヒープ領域の許可されている最小の割合(0から100まで)を設定します。空きヒープ領域がこの値を下回った場合、そのヒープは拡大します。デフォルトでは、この値は40%に設定されています。
+.sp
+次の例では、空きヒープの最小比率を25%に設定する方法を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:MinHeapFreeRatio=25\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:NewRatio=\fIratio\fR
+.RS 4
+若い世代のサイズと古い世代のサイズとの比率を設定します。デフォルトでは、このオプションは2に設定されています。次の例では、若い/古いの比率を1に設定する方法を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:NewRatio=1\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:NewSize=\fIsize\fR
+.RS 4
+若い世代(ナーサリ)のヒープの初期サイズ(バイト単位)を設定します。キロバイトを示す場合は文字\fBk\fRまたは\fBK\fR、メガバイトを示す場合は文字\fBm\fRまたは\fBM\fR、ギガバイトを示す場合は文字\fBg\fRまたは\fBG\fRを追加します。
+.sp
+ヒープの若い世代リージョンは新しいオブジェクトに使用されます。GCは、他のリージョンよりこのリージョンで、より頻繁に実行されます。若い世代のサイズが小さすぎる場合、多数のマイナーGCが実行されます。サイズが大きすぎる場合、フルGCのみが実行されますが、完了までに時間がかかることがあります。若い世代のサイズは、全体のヒープ・サイズの半分から4分の1の間にしておくことをお薦めします。
+.sp
+次の例では、若い世代の初期サイズを様々な単位を使用して256MBに設定する方法を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:NewSize=256m\fR
+\fB\-XX:NewSize=262144k\fR
+\fB\-XX:NewSize=268435456\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+\fB\-XX:NewSize\fRオプションは\fB\-Xmn\fRと同等です。
+.RE
+.PP
+\-XX:ParallelGCThreads=\fIthreads\fR
+.RS 4
+若い世代と古い世代でパラレル・ガベージ・コレクションに使用するスレッドの数を設定します。デフォルト値は、JVMに使用できるCPUの数によって異なります。
+.sp
+たとえば、パラレルGCのスレッド数を2に設定するには、次のオプションを指定します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:ParallelGCThreads=2\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:+ParallelRefProcEnabled
+.RS 4
+パラレル参照処理を有効にします。デフォルトでは、このオプションは無効です。
+.RE
+.PP
+\-XX:+PrintAdaptiveSizePolicy
+.RS 4
+適応世代サイズ指定に関する情報の出力を有効にします。デフォルトでは、このオプションは無効です。
+.RE
+.PP
+\-XX:+PrintGC
+.RS 4
+GCごとのメッセージの出力を有効にします。デフォルトでは、このオプションは無効です。
+.RE
+.PP
+\-XX:+PrintGCApplicationConcurrentTime
+.RS 4
+最後の休止(たとえばGC休止など)以降に経過した時間の出力を有効にします。デフォルトでは、このオプションは無効です。
+.RE
+.PP
+\-XX:+PrintGCApplicationStoppedTime
+.RS 4
+休止(たとえばGC休止など)が継続した時間の出力を有効にします。デフォルトでは、このオプションは無効です。
+.RE
+.PP
+\-XX:+PrintGCDateStamps
+.RS 4
+GCごとの日付スタンプの出力を有効にします。デフォルトでは、このオプションは無効です。
+.RE
+.PP
+\-XX:+PrintGCDetails
+.RS 4
+GCごとの詳細メッセージの出力を有効にします。デフォルトでは、このオプションは無効です。
+.RE
+.PP
+\-XX:+PrintGCTaskTimeStamps
+.RS 4
+個々のGCワーカー・スレッド・タスクごとのタイムスタンプの出力を有効にします。デフォルトでは、このオプションは無効です。
+.RE
+.PP
+\-XX:+PrintGCTimeStamps
+.RS 4
+GCごとのタイムスタンプの出力を有効にします。デフォルトでは、このオプションは無効です。
+.RE
+.PP
+\-XX:+PrintStringDeduplicationStatistics
+.RS 4
+詳細な重複除外統計を印刷します。デフォルトでは、このオプションは無効です。\fB\-XX:+UseStringDeduplication\fRオプションを参照してください。
+.RE
+.PP
+\-XX:+PrintTenuringDistribution
+.RS 4
+殿堂入り期間情報の出力を有効にします。次に、出力の例を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBDesired survivor size 48286924 bytes, new threshold 10 (max 10)\fR
+\fB\- age 1: 28992024 bytes, 28992024 total\fR
+\fB\- age 2: 1366864 bytes, 30358888 total\fR
+\fB\- age 3: 1425912 bytes, 31784800 total\fR
+\fB\&.\&.\&.\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+期間1オブジェクトは、最も若いサバイバです(前のスカベンジの後に作成され、最新のスカベンジで存続し、Eden領域からサバイバ領域に移動しました)。期間2オブジェクトは、2つのスカベンジで存続します(2番目のスカベンジ中に、あるサバイバ領域から次の領域にコピーされました)。このように続きます。
+.sp
+前述の例では、28,992,024バイトが1つのスカベンジで存続し、Eden領域からサバイバ領域にコピーされました。1,366,864バイトは期間2オブジェクトなどにより占有されています。各行の3番目の値は、期間n以下のオブジェクトの累積サイズです。
+.sp
+デフォルトでは、このオプションは無効です。
+.RE
+.PP
+\-XX:+ScavengeBeforeFullGC
+.RS 4
+それぞれのフルGCの前に若い世代のGCを有効にします。このオプションはデフォルトで有効になっています。フルGCの前に若い世代のスカベンジを行うと、古い世代領域から若い世代領域へのアクセスが可能なオブジェクトの数を減らすことができるため、これを無効に\fIしない\fRことをお薦めします。各フルGCの前に若い世代のGCを無効にするには、\fB\-XX:\-ScavengeBeforeFullGC\fRを指定します。
+.RE
+.PP
+\-XX:SoftRefLRUPolicyMSPerMB=\fItime\fR
+.RS 4
+ソフト・アクセスが可能なオブジェクトが最後に参照されてからヒープ上でアクティブなままになっている時間(ミリ秒単位)を設定します。デフォルト値は、ヒープ内の空きメガバイト当たりで1秒の存続期間です。\fB\-XX:SoftRefLRUPolicyMSPerMB\fRオプションは、現在のヒープ・サイズ(Java HotSpot Client VM用)または最大可能ヒープ・サイズ(Java HotSpot Server VM用)の1メガバイト当たりのミリ秒を表す整数値を受け入れます。この違いは、Client VMは、ヒープを大きくするのではなく、ソフト参照をフラッシュする傾向があるのに対し、Server VMは、ソフト参照をフラッシュするのではなく、ヒープを大きくする傾向があることを意味します。後者の場合、\fB\-Xmx\fRオプションの値は、ソフト参照がどのくらい迅速にガベージ・コレクションされるかに重要な影響を及ぼします。
+.sp
+次の例では、値を2\&.5秒に設定する方法を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:SoftRefLRUPolicyMSPerMB=2500\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:StringDeduplicationAgeThreshold=\fIthreshold\fR
+.RS 4
+指定した期間に到達しつつある\fBString\fRオブジェクトは、重複除外の候補とみなされます。オブジェクトの期間は、オブジェクトがガベージ・コレクションで存続した回数の測定値です。これは、殿堂入りと呼ばれる場合もあります。\fB\-XX:+PrintTenuringDistribution\fRオプションを参照してください。この期間に到達する前に古いヒープ・リージョンに昇格された\fBString\fRオブジェクトは、常に重複除外の候補とみなされます。このオプションのデフォルト値は\fB3\fRです。\fB\-XX:+UseStringDeduplication\fRオプションを参照してください。
+.RE
+.PP
+\-XX:SurvivorRatio=\fIratio\fR
+.RS 4
+Eden領域のサイズとサバイバ領域のサイズとの比率を設定します。デフォルトでは、このオプションは8に設定されています。次の例では、Eden/サバイバ領域の比率を4に設定する方法を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:SurvivorRatio=4\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:TargetSurvivorRatio=\fIpercent\fR
+.RS 4
+若いガベージ・コレクションの後に使用されるサバイバ領域の目的の割合(0から100まで)を設定します。デフォルトでは、このオプションは50%に設定されています。
+.sp
+次の例では、ターゲットのサバイバ領域の比率を30%に設定する方法を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:TargetSurvivorRatio=30\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:TLABSize=\fIsize\fR
+.RS 4
+スレッド・ローカルな割当てバッファ(TLAB)の初期サイズ(バイト単位)を設定します。キロバイトを示す場合は文字\fBk\fRまたは\fBK\fR、メガバイトを示す場合は文字\fBm\fRまたは\fBM\fR、ギガバイトを示す場合は文字\fBg\fRまたは\fBG\fRを追加します。このオプションが0に設定されている場合、JVMでは初期サイズが自動的に選択されます。
+.sp
+次の例では、TLABの初期サイズを512KBに設定する方法を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:TLABSize=512k\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:+UseAdaptiveSizePolicy
+.RS 4
+適応世代サイズ指定の使用を有効にします。このオプションはデフォルトで有効になっています。適応世代サイズ指定を無効にするには、\fB\-XX:\-UseAdaptiveSizePolicy\fRを指定し、メモリー割当てプールのサイズを明示的に設定します(\fB\-XX:SurvivorRatio\fRオプションを参考にしてください)。
+.RE
+.PP
+\-XX:+UseCMSInitiatingOccupancyOnly
+.RS 4
+CMSコレクタの開始のための唯一の基準としての占有値の使用を有効にします。デフォルトでは、このオプションは無効になっており、他の基準が使用されます。
+.RE
+.PP
+\-XX:+UseConcMarkSweepGC
+.RS 4
+古い世代へのCMSガベージ・コレクタの使用を有効にします。アプリケーションの待機時間の要件を、スループット(\fB\-XX:+UseParallelGC\fR)ガベージ・コレクタによって満たすことができない場合、CMSガベージ・コレクタを使用することをお薦めします。G1ガベージ・コレクタ(\fB\-XX:+UseG1GC\fR)は別の代替となります。
+.sp
+デフォルトでは、このオプションは無効になっており、コレクタは、マシンの構成およびJVMのタイプに基づいて、自動的に選択されます。このオプションが有効な場合、\fB\-XX:+UseParNewGC\fRオプションは自動的に設定され、無効化しない必要がありますが、理由はJDK 8では\fB\-XX:+UseConcMarkSweepGC \-XX:\-UseParNewGC\fRオプションの組合せが非推奨であるためです。
+.RE
+.PP
+\-XX:+UseG1GC
+.RS 4
+ガベージファースト(G1)・ガベージ・コレクタの使用を有効にします。これはサーバー形式のガベージ・コレクタで、大量のRAMを持つマルチプロセッサ・マシンを対象としています。高い確率でGC休止時間の目標を達成し、同時に適切なスループットも維持します。G1コレクタは、GC待機時間の限定された要件(安定した予測可能な0\&.5秒未満の休止時間)を持つ、大きいヒープ(約6GB以上のサイズ)が必要なアプリケーションに推奨されます。
+.sp
+デフォルトでは、このオプションは無効になっており、コレクタは、マシンの構成およびJVMのタイプに基づいて、自動的に選択されます。
+.RE
+.PP
+\-XX:+UseGCOverheadLimit
+.RS 4
+\fBOutOfMemoryError\fR例外がスローされるまでに、GCでJVMによって要した時間の割合を制限するポリシーの使用を有効にします。デフォルトでは、このオプションは有効になっており、ガベージ・コレクションに合計時間の98%より多く費やされ、ヒープのリカバリが2%未満である場合、パラレルGCによって\fBOutOfMemoryError\fRがスローされます。ヒープが小さい場合、この機能は、アプリケーションが長期間ほとんどまたはまったく進捗なく実行している状態を回避するために使用できます。このオプションを無効にするには、\fB\-XX:\-UseGCOverheadLimit\fRを指定します。
+.RE
+.PP
+\-XX:+UseNUMA
+.RS 4
+アプリケーションで短い待機時間のメモリーの使用を増加させることで、不均一なメモリー・アーキテクチャ(NUMA)を使用したマシン上のアプリケーションのパフォーマンス最適化を有効にします。デフォルトでは、このオプションは無効になっており、NUMAに対する最適化は行われません。このオプションは、パラレル・ガベージ・コレクタ(\fB\-XX:+UseParallelGC\fR)が使用されている場合のみ使用可能です。
+.RE
+.PP
+\-XX:+UseParallelGC
+.RS 4
+複数のプロセッサを利用してアプリケーションのパフォーマンスを向上させる、パラレル・スカベンジ・ガベージ・コレクタ(スループット・コレクタとも呼ばれる)の使用を有効にします。
+.sp
+デフォルトでは、このオプションは無効になっており、コレクタは、マシンの構成およびJVMのタイプに基づいて、自動的に選択されます。これを有効にした場合、明示的に無効にしないかぎり、\fB\-XX:+UseParallelOldGC\fRオプションが自動的に有効になります。
+.RE
+.PP
+\-XX:+UseParallelOldGC
+.RS 4
+フルGCへのパラレル・ガベージ・コレクタの使用を有効にします。デフォルトでは、このオプションは無効です。これを有効にすると、\fB\-XX:+UseParallelGC\fRオプションが自動的に有効になります。
+.RE
+.PP
+\-XX:+UseParNewGC
+.RS 4
+若い世代でのコレクションへのパラレル・スレッドの使用を有効にします。デフォルトでは、このオプションは無効です。\fB\-XX:+UseConcMarkSweepGC\fRオプションを設定すると、これは自動的に有効になります。JDK 8では、\fB\-XX:+UseConcMarkSweepGC\fRオプションを指定せずに\fB\-XX:+UseParNewGC\fRオプションを使用することは非推奨です。
+.RE
+.PP
+\-XX:+UseSerialGC
+.RS 4
+シリアル・ガベージ・コレクタの使用を有効にします。ガベージ・コレクションから特別な機能を必要としない、小規模で単純なアプリケーションの場合には、これは一般に最適な選択です。デフォルトでは、このオプションは無効になっており、コレクタは、マシンの構成およびJVMのタイプに基づいて、自動的に選択されます。
+.RE
+.PP
+\-XX:+UseSHM
+.RS 4
+Linuxでは、JVMで共有メモリーを使用してラージ・ページを設定できるようにします。
+.sp
+詳細は、"ラージ・ページ"を参照してください。
+.RE
+.PP
+\-XX:+UseStringDeduplication
+.RS 4
+文字列の重複除外を有効化します。デフォルトでは、このオプションは無効です。このオプションを使用するには、ガベージファースト(G1)・ガベージ・コレクタを有効にする必要があります。\fB\-XX:+UseG1GC\fRオプションを参照してください。
+.sp
+多くの\fBString\fRオブジェクトが同じであるということから、\fIString deduplication\fRにより、Javaヒープ上の\fBString\fRオブジェクトのメモリー・フットプリントが削減されます。各\fBString\fRオブジェクトが独自の文字配列をポイントするのではなく、同一の\fBString\fRオブジェクトは同じ文字配列をポイントし共有できます。
+.RE
+.PP
+\-XX:+UseTLAB
+.RS 4
+若い世代の領域でのスレッド・ローカルな割当てブロック(TLAB)の使用を有効にします。このオプションはデフォルトで有効になっています。TLABの使用を無効にするには、\fB\-XX:\-UseTLAB\fRを指定します。
+.RE
+.SS "非推奨で削除されたオプション"
+.PP
+これらのオプションは、以前のリリースには含まれていましたが、以降は不要とみなされています。
+.PP
+\-Xincgc
+.RS 4
+インクリメンタル・ガベージ・コレクションを有効にします。このオプションはJDK 8では非推奨で、それに代わるものはありません。
+.RE
+.PP
+\-Xrun\fIlibname\fR
+.RS 4
+指定したデバッグ/プロファイリングのライブラリをロードします。このオプションは、\fB\-agentlib\fRオプションに取って代わられました。
+.RE
+.PP
+\-XX:CMSIncrementalDutyCycle=\fIpercent\fR
+.RS 4
+並行コレクタの実行が許可されているマイナー・コレクション間の時間の割合(0から100まで)を設定します。\fB\-XX:+CMSIncrementalMode\fRオプションの非推奨を受けて、このオプションはJDK 8では非推奨となり、それに代わるものはありません。
+.RE
+.PP
+\-XX:CMSIncrementalDutyCycleMin=\fIpercent\fR
+.RS 4
+\fB\-XX:+CMSIncrementalPacing\fRが有効な場合にデューティ・サイクルの下限であるマイナー・コレクション間の時間の割合(0から100まで)を設定します。\fB\-XX:+CMSIncrementalMode\fRオプションの非推奨を受けて、このオプションはJDK 8では非推奨となり、それに代わるものはありません。
+.RE
+.PP
+\-XX:+CMSIncrementalMode
+.RS 4
+CMSコレクタの増分モードを有効にします。\fBCMSIncremental\fRで始まるその他のオプションとともに、このオプションはJDK 8では非推奨となり、それに代わるものはありません
+.RE
+.PP
+\-XX:CMSIncrementalOffset=\fIpercent\fR
+.RS 4
+増分モードのデューティ・サイクルをマイナー・コレクション間で期間内に右に移動する時間の割合(0から100まで)を設定します。\fB\-XX:+CMSIncrementalMode\fRオプションの非推奨を受けて、このオプションはJDK 8では非推奨となり、それに代わるものはありません。
+.RE
+.PP
+\-XX:+CMSIncrementalPacing
+.RS 4
+JVMの実行中に収集された統計に基づいて、増分モードのデューティ・サイクルの自動調整を有効にします。\fB\-XX:+CMSIncrementalMode\fRオプションの非推奨を受けて、このオプションはJDK 8では非推奨となり、それに代わるものはありません。
+.RE
+.PP
+\-XX:CMSIncrementalSafetyFactor=\fIpercent\fR
+.RS 4
+デューティ・サイクルを計算する際に、保守を追加するために使用される時間の割合(0から100まで)を設定します。\fB\-XX:+CMSIncrementalMode\fRオプションの非推奨を受けて、このオプションはJDK 8では非推奨となり、それに代わるものはありません。
+.RE
+.PP
+\-XX:CMSInitiatingPermOccupancyFraction=\fIpercent\fR
+.RS 4
+GCを開始する永久世代占有率(0から100まで)を設定します。このオプションはJDK 8では非推奨で、それに代わるものはありません。
+.RE
+.PP
+\-XX:MaxPermSize=\fIsize\fR
+.RS 4
+永久世代領域の最大サイズ(バイト単位)を設定します。このオプションは、JDK 8で非推奨になり、\fB\-XX:MaxMetaspaceSize\fRオプションに取って代わられました。
+.RE
+.PP
+\-XX:PermSize=\fIsize\fR
+.RS 4
+超えた場合にはガベージ・コレクションをトリガーする、永久世代に割り当てられた領域(バイト単位)を設定します。このオプションは、JDK 8で非推奨になり、\fB\-XX:MetaspaceSize\fRオプションに取って代わられました。
+.RE
+.PP
+\-XX:+UseSplitVerifier
+.RS 4
+検証プロセスの分割を有効にします。デフォルトでは、このオプションは以前のリリースでは有効になっており、検証は、タイプ参照(コンパイラによって実行)と、タイプ・チェック(JVMランタイムによって実行)の2つのフェーズに分割されていました。このオプションはJDK 8で非推奨となり、検証はデフォルトで分割され、無効にする方法はありません。
+.RE
+.PP
+\-XX:+UseStringCache
+.RS 4
+一般に割り当てられた文字列のキャッシングを有効にします。このオプションはJDK 8から削除され、それに代わるものはありません。
+.RE
+.SH "パフォーマンス・チューニングの例"
+.PP
+次の例では、スループットの最適化またはレスポンス時間の短縮化のいずれかを行うための、試験的なチューニング・フラグの使用方法を示します。
+.PP
+\fB例 1 \fRスループットを向上するためのチューニング
+.RS 4
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBjava \-d64 \-server \-XX:+AggressiveOpts \-XX:+UseLargePages \-Xmn10g \-Xms26g \-Xmx26g\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\fB例 2 \fRレスポンス時間を速くするためのチューニング
+.RS 4
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBjava \-d64 \-XX:+UseG1GC \-Xms26g Xmx26g \-XX:MaxGCPauseMillis=500 \-XX:+PrintGCTimeStamp\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.SH "ラージ・ページ"
+.PP
+ヒュージ・ページとも呼ばれるラージ・ページは、標準のメモリー・ページ・サイズ(プロセッサおよびオペレーティング・システムによって異なります)よりはるかに大きいメモリー・ページです。ラージ・ページは、プロセッサのTranslation\-Lookaside Bufferを最適化します。
+.PP
+Translation\-Lookaside Buffer (TLB)は、最近使用された仮想から物理へのアドレス変換を保持するページ変換キャッシュです。TLBは、少ないシステム・リソースです。プロセッサが複数のメモリー・アクセスが必要な場合のある階層ページ表から読み取る必要があるため、TLBミスは負荷がかかる可能性があります。大きいメモリー・ページ・サイズを使用して、単一のTLBエントリで大きいメモリー範囲を表すことができます。TLB不足が少なくなり、メモリー集約型のアプリケーションのパフォーマンスが向上する可能性があります。
+.PP
+ただし、ラージ・ページのページ・メモリーは、システムのパフォーマンスに悪影響を与える場合があります。たとえば、大量のメモリーがアプリケーションで確保される場合、通常メモリー不足や他のアプリケーションの過剰なページングが発生し、システム全体が遅くなる可能性があります。また、長時間稼働しているシステムは、過剰な断片化が発生する可能性があります。これにより、十分な大きさのページ・メモリーを予約できない可能性があります。これが発生した場合、OSまたはJVMのいずれかが通常のページの使用に戻ります。
+.SS "ラージ・ページのサポート"
+.PP
+SolarisおよびLinuxは、ラージ・ページをサポートします。
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.ps +1
+\fBSolaris\fR
+.RS 4
+.PP
+Solaris 9以上には、Multiple Page Size Support(MPSS)が含まれています。追加の構成は必要ありません。http://www\&.oracle\&.com/technetwork/server\-storage/solaris10/overview/solaris9\-features\-scalability\-135663\&.htmlを参照してください。
+.RE
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.ps +1
+\fBLinux\fR
+.RS 4
+.PP
+2\&.6カーネルは、ラージ・ページをサポートします。一部のベンダーは、2\&.4ベースのリリースのコードをバックポートしています。システムがラージ・ページ・メモリーをサポートしているかどうかを確認するには、次を試行してください:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB# cat /proc/meminfo | grep Huge\fR
+\fBHugePages_Total: 0\fR
+\fBHugePages_Free: 0\fR
+\fBHugepagesize: 2048 kB\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+出力に3つの"Huge"変数が示されている場合、システムはラージ・ページ・メモリーをサポートしていますが、構成する必要があります。コマンドが何も出力しない場合、システムはラージ・ページをサポートしていません。ラージ・ページ・メモリーを使用するシステムを構成するには、\fBroot\fRとしてログインして、次の手順を実行してください:
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 1.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 1." 4.2
+.\}
+オプション\fB\-XX:+UseSHM\fR(\fB\-XX:+UseHugeTLBFS\fRのかわり)を使用する場合、\fBSHMMAX\fR値を増やしてください。Javaヒープ・サイズより大きくする必要があります。4GB以下の物理RAMを使用したシステムで、次によりすべてのメモリーが共有可能になります:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB# echo 4294967295 > /proc/sys/kernel/shmmax\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 2.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 2." 4.2
+.\}
+オプション\fB\-XX:+UseSHM\fRまたは\fB\-XX:+UseHugeTLBFS\fRを使用する場合、ラージ・ページの数を指定してください。次の例では、4GBシステムの3GBがラージ・ページに予約されます(2048KBのラージ・ページ・サイズを仮定する場合、3GB = 3 * 1024MB = 3072MB = 3072 * 1024KB = 3145728KB and 3145728KB / 2048KB = 1536):
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB# echo 1536 > /proc/sys/vm/nr_hugepages\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.if n \{\
+.sp
+.\}
+.RS 4
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.ps +1
+\fB注記\fR
+.ps -1
+.br
+.TS
+allbox tab(:);
+l.
+T{
+注意
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+システムを再起動した後に\fB/proc\fRに含まれる値がリセットされるので注意してください。そのため、初期化スクリプト(\fBrc\&.local\fRや\fBsysctl\&.conf\fRなど)で設定できます。
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+OSカーネル・パラメータ\fB/proc/sys/kernel/shmmax\fRまたは\fB/proc/sys/vm/nr_hugepages\fRを構成(またはサイズ変更)する場合、JavaプロセスがJavaヒープ以外の領域に対してラージ・ページを割り当てることがあります。これらの手順を使用して、次の領域に対してラージ・ページを割り当てることができます:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Javaヒープ
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Permanent世代
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+コード・キャッシュ
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+パラレルGCのマーキング・ビットマップ・データ構造
+.RE
+.sp
+その結果、Javaヒープのサイズに\fBnr_hugepages\fRパラメータを構成すると、領域のサイズが非常に大きいためにJVMがPermanent世代およびラージ・ページのコード・キャッシュ領域の割当てに失敗する場合があります。
+.RE
+T}
+.TE
+.sp 1
+.sp .5v
+.RE
+.RE
+.SH "終了ステータス"
+.PP
+通常、次の終了値が起動ツールから返されるのは、起動元が不正な引数で呼び出されたか、深刻なエラーが発生したか、あるいはJVMにより例外がスローされた場合です。ただし、Javaアプリケーションは、API呼出し\fBSystem\&.exit(exitValue)\fRを使用して任意の値を返すことを選択することもできます。値は次のとおりです。
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fB0\fR: 正常終了
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fB>0\fR: エラー発生
+.RE
+.SH "関連項目"
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+javac(1)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+jdb(1)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+javah(1)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+jar(1)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+jstat(1)
+.RE
+.br
+'pl 8.5i
+'bp
diff --git a/FCL/src/main/assets/java/man/ja_JP.UTF-8/man1/jjs.1 b/FCL/src/main/assets/java/man/ja_JP.UTF-8/man1/jjs.1
new file mode 100644
index 000000000..93d89f0ad
--- /dev/null
+++ b/FCL/src/main/assets/java/man/ja_JP.UTF-8/man1/jjs.1
@@ -0,0 +1,434 @@
+'\" t
+.\" Copyright (c) 1994, 2014, Oracle and/or its affiliates. All rights reserved.
+.\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+.\"
+.\" This code is free software; you can redistribute it and/or modify it
+.\" under the terms of the GNU General Public License version 2 only, as
+.\" published by the Free Software Foundation.
+.\"
+.\" This code 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
+.\" version 2 for more details (a copy is included in the LICENSE file that
+.\" accompanied this code).
+.\"
+.\" You should have received a copy of the GNU General Public License version
+.\" 2 along with this work; if not, write to the Free Software Foundation,
+.\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+.\"
+.\" Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+.\" or visit www.oracle.com if you need additional information or have any
+.\" questions.
+.\"
+.\" Title: jjs
+.\" Language: Japanese
+.\" Date: 2015年3月3日
+.\" SectDesc: 基本ツール
+.\" Software: JDK 8
+.\" Arch: 汎用
+.\" Part Number: E58103-01
+.\" Doc ID: JSSON
+.\"
+.if n .pl 99999
+.TH "jjs" "1" "2015年3月3日" "JDK 8" "基本ツール"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名前"
+jjs \- Nashornエンジンを呼び出します。
+.SH "概要"
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\fBjjs\fR\fR\fB [\fR\fB\fIoptions\fR\fR\fB] [\fR\fB\fIscript\-files\fR\fR\fB] [\-\- \fR\fB\fIarguments\fR\fR\fB]\fR
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+\fIoptions\fR
+.RS 4
+空白文字で区切られた、\fBjjs\fRコマンドの1つ以上のオプション。詳細は、オプションを参照してください。
+.RE
+.PP
+\fIscript\-files\fR
+.RS 4
+空白文字で区切られた、Nashornを使用して解釈する1つ以上のスクリプト・ファイル。ファイルが指定されない場合は、対話型シェルが起動されます。
+.RE
+.PP
+\fIarguments\fR
+.RS 4
+二重ハイフン・マーカー(\fB\-\-\fR)の後のすべての値が、引数としてスクリプトまたは対話型シェルに渡されます。これらの値には\fBarguments\fRプロパティを使用してアクセスできます(Example 3を参照してください)。
+.RE
+.SH "説明"
+.PP
+\fBjjs\fRコマンド行ツールを使用してNashornエンジンを呼び出します。これを使用して、1つまたは複数のスクリプト・ファイルを解釈したり、対話型シェルを実行することができます。
+.SH "オプション"
+.PP
+\fBjjs\fRコマンドのオプションはスクリプトがNashornによって解釈される条件を制御します。
+.PP
+\-ccs=\fIsize\fR
+.br
+\-\-class\-cache\-size=\fIsize\fR
+.RS 4
+クラス・キャッシュ・サイズをバイト単位で設定します。キロバイト(KB)を示すために\fBk\fRまたは\fBK\fRの文字を追加し、メガバイト(MB)を示すために\fBm\fRまたは\fBM\fRの文字を追加し、ギガバイト(GB)を示すために\fBg\fRまたは\fBG\fRを追加します。デフォルトでは、クラス・キャッシュ・サイズは50バイトに設定されます。次の例は、1024バイト(1 KB)に設定する方法を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-css=100\fR
+\fB\-css=1k\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-co
+.br
+\-\-compile\-only
+.RS 4
+スクリプトを実行せずにコンパイルします。
+.RE
+.PP
+\-cp \fIpath\fR
+.br
+\-classpath \fIpath\fR
+.RS 4
+サポートするクラスへのパスを指定します。複数のパスを設定するには、このオプションを繰り返すか、または各パスをコロン(:)で区切ります。
+.RE
+.PP
+\-D\fIname\fR=\fIvalue\fR
+.RS 4
+プロパティ名に値を割り当てることで、スクリプトに渡すシステム・プロパティを設定します。次の例で、対話型モードでNashornを呼び出して、\fBmyValue\fRを\fBmyKey\fRという名前のプロパティに割り当てる方法を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB>> \fR\fB\fBjjs \-DmyKey=myValue\fR\fR
+\fBjjs> \fR\fB\fBjava\&.lang\&.System\&.getProperty("myKey")\fR\fR
+\fBmyValue\fR
+\fBjjs>\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+このオプションを繰り返し使用すると、複数のプロパティを設定できます。
+.RE
+.PP
+\-d=\fIpath\fR
+.br
+\-\-dump\-debug\-dir=\fIpath\fR
+.RS 4
+クラス・ファイルをダンプするディレクトリへのパスを指定します。
+.RE
+.PP
+\-\-debug\-lines
+.RS 4
+クラス・ファイル内の行番号表を生成します。デフォルトでは、このオプションは有効になっています。無効にするには\fB\-\-debug\-lines=false\fRを指定します。
+.RE
+.PP
+\-\-debug\-locals
+.RS 4
+クラス・ファイル内のローカル変数を生成します。
+.RE
+.PP
+\-doe
+.br
+\-\-dump\-on\-error
+.RS 4
+エラーが発生したときに、フル・スタック・トレースを提供します。デフォルトでは、簡単なエラー・メッセージのみが出力されます。
+.RE
+.PP
+\-\-early\-lvalue\-error
+.RS 4
+無効な左辺値式が早期エラーとして(つまり、コードが解析されるときに)報告されます。デフォルトでは、このオプションは有効になっています。無効にするには\fB\-\-early\-lvalue\-error=false\fRを指定します。無効な場合、無効な左辺値式はコードが実行されるまで報告されません。
+.RE
+.PP
+\-\-empty\-statements
+.RS 4
+空の文をJavaの抽象構文ツリーに保存します。
+.RE
+.PP
+\-fv
+.br
+\-\-fullversion
+.RS 4
+完全なNashornバージョン文字列を出力します。
+.RE
+.PP
+\-\-function\-statement\-error
+.RS 4
+関数の宣言が文として使用されるとエラー・メッセージが出力されます。
+.RE
+.PP
+\-\-function\-statement\-warning
+.RS 4
+関数の宣言が文として使用されると警告メッセージが出力されます。
+.RE
+.PP
+\-fx
+.RS 4
+スクリプトをJavaFXアプリケーションとして起動します。
+.RE
+.PP
+\-h
+.br
+\-help
+.RS 4
+オプションのリストとその説明を出力します。
+.RE
+.PP
+\-J\fIoption\fR
+.RS 4
+指定した\fBjava\fR起動オプションをJVMに渡します。次の例で、対話型モードでNashornを呼び出して、JVMによって使用される最大メモリーを4 GBに設定する方法を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB>> \fR\fB\fBjjs \-J\-Xmx4g\fR\fR
+\fBjjs> \fR\fB\fBjava\&.lang\&.Runtime\&.getRuntime()\&.maxMemory()\fR\fR
+\fB3817799680\fR
+\fBjjs>\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+このオプションを繰り返し使用すると、複数の\fBjava\fRコマンド・オプションを渡すことができます。
+.RE
+.PP
+\-\-language=[es5]
+.RS 4
+ECMAScript言語バージョンを指定します。デフォルトのバージョンはES5です。
+.RE
+.PP
+\-\-lazy\-compilation
+.RS 4
+レイジー・コード生成戦略(つまり、スクリプト全体が一度にコンパイルされない)を有効にします。このオプションは試験的なものです。
+.RE
+.PP
+\-\-loader\-per\-compile
+.RS 4
+コンパイルごとに新しいクラス・ローダーを作成します。デフォルトでは、このオプションは有効になっています。無効にするには\fB\-\-loader\-per\-compile=false\fRを指定します。
+.RE
+.PP
+\-\-log=\fIsubsystem\fR:\fIlevel\fR
+.RS 4
+指定されたサブシステムに対して、特定のレベルでロギングを実行します。カンマで区切って複数のサブシステムのロギング・レベルを指定できます。次に例を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-\-log=fields:finest,codegen:info\fR
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-\-optimistic\-types=[true|false]
+.RS 4
+再コンパイルの最適化を解除してオプティミスティック・タイプ仮定を有効または無効にします。オプティミスティック・タイプを使用した実行によって最終的な速度が向上しますが、ウォームアップ時間が増える場合があります。
+.RE
+.PP
+\-\-package=\fIname\fR
+.RS 4
+生成されたクラス・ファイルを追加するパッケージを指定します。
+.RE
+.PP
+\-\-parse\-only
+.RS 4
+コンパイルせずにコードを解析します。
+.RE
+.PP
+\-\-print\-ast
+.RS 4
+抽象構文ツリーを出力します。
+.RE
+.PP
+\-\-print\-code
+.RS 4
+バイトコードを出力します。
+.RE
+.PP
+\-\-print\-lower\-ast
+.RS 4
+掘り下げた抽象構文ツリーを出力します。
+.RE
+.PP
+\-\-print\-lower\-parse
+.RS 4
+掘り下げた解析ツリーを出力します。
+.RE
+.PP
+\-\-print\-no\-newline
+.RS 4
+その他の\fB\-\-print*\fRオプションで強制的に1行で出力します。
+.RE
+.PP
+\-\-print\-parse
+.RS 4
+解析ツリーを出力します。
+.RE
+.PP
+\-\-print\-symbols
+.RS 4
+記号表を出力します。
+.RE
+.PP
+\-pcs
+.br
+\-\-profile\-callsites
+.RS 4
+呼び出しサイトのプロファイル・データをダンプします。
+.RE
+.PP
+\-scripting
+.RS 4
+シェルのスクリプト機能を有効にします。
+.RE
+.PP
+\-\-stderr=\fIfilename\fR|\fIstream\fR|\fItty\fR
+.RS 4
+標準エラー・ストリームを指定したファイル、ストリーム(たとえば\fBstdout\fR)に、またはテキスト端末にリダイレクトします。
+.RE
+.PP
+\-\-stdout=\fIfilename\fR|\fIstream\fR|\fItty\fR
+.RS 4
+標準出力ストリームを指定したファイル、ストリーム(たとえば\fBstderr\fR)に、またはテキスト端末にリダイレクトします。
+.RE
+.PP
+\-strict
+.RS 4
+標準(ECMAScript Edition 5\&.1)への準拠を強化するstrictモードを有効にし、これにより共通のコーディング・エラーを簡単に検出できるようになります。
+.RE
+.PP
+\-t=\fIzone\fR
+.br
+\-timezone=\fIzone\fR
+.RS 4
+スクリプトの実行に対し指定したタイムゾーンを設定します。OSで設定されたタイムゾーンをオーバーライドし、\fBDate\fRオブジェクトで使用されます。
+.RE
+.PP
+\-tcs=\fIparameter\fR
+.br
+\-\-trace\-callsites=\fIparameter\fR
+.RS 4
+呼出しサイトのトレースのモードを有効にします。使用可能なパラメータは、次のとおりです。
+.PP
+miss
+.RS 4
+呼出しサイトのミスをトレースします。
+.RE
+.PP
+enterexit
+.RS 4
+呼出しサイトへの出入りをトレースします。
+.RE
+.PP
+objects
+.RS 4
+オブジェクトのプロパティを出力します。
+.RE
+.RE
+.PP
+\-\-verify\-code
+.RS 4
+バイトコードを実行する前に検証します。
+.RE
+.PP
+\-v
+.br
+\-version
+.RS 4
+Nashornバージョン文字列を出力します。
+.RE
+.PP
+\-xhelp
+.RS 4
+コマンド行オプションの拡張ヘルプを出力します。
+.RE
+.SH "例"
+.PP
+\fB例 1 \fRNashornを使用したスクリプトの実行
+.RS 4
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBjjs script\&.js\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\fB例 2 \fR対話型モードでのNashornの実行
+.RS 4
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB>> \fR\fB\fBjjs\fR\fR
+\fBjjs> \fR\fB\fBprintln("Hello, World!")\fR\fR
+\fBHello, World!\fR
+\fBjjs> \fR\fB\fBquit()\fR\fR
+\fB>>\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\fB例 3 \fRNashornへの引数の渡し
+.RS 4
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB>> \fR\fB\fBjjs \-\- a b c\fR\fR
+\fBjjs> \fR\fB\fBarguments\&.join(", ")\fR\fR
+\fBa, b, c\fR
+\fBjjs>\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.SH "関連項目"
+.PP
+\fBjrunscript\fR
+.br
+'pl 8.5i
+'bp
diff --git a/FCL/src/main/assets/java/man/ja_JP.UTF-8/man1/keytool.1 b/FCL/src/main/assets/java/man/ja_JP.UTF-8/man1/keytool.1
new file mode 100644
index 000000000..7935009f4
--- /dev/null
+++ b/FCL/src/main/assets/java/man/ja_JP.UTF-8/man1/keytool.1
@@ -0,0 +1,2248 @@
+'\" t
+.\" Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
+.\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+.\"
+.\" This code is free software; you can redistribute it and/or modify it
+.\" under the terms of the GNU General Public License version 2 only, as
+.\" published by the Free Software Foundation.
+.\"
+.\" This code 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
+.\" version 2 for more details (a copy is included in the LICENSE file that
+.\" accompanied this code).
+.\"
+.\" You should have received a copy of the GNU General Public License version
+.\" 2 along with this work; if not, write to the Free Software Foundation,
+.\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+.\"
+.\" Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+.\" or visit www.oracle.com if you need additional information or have any
+.\" questions.
+.\"
+.\" Title: keytool
+.\" Language: Japanese
+.\" Date: 2015年3月3日
+.\" SectDesc: セキュリティ・ツール
+.\" Software: JDK 8
+.\" Arch: 汎用
+.\" Part Number: E58103-01
+.\" Doc ID: JSSON
+.\"
+.if n .pl 99999
+.TH "keytool" "1" "2015年3月3日" "JDK 8" "セキュリティ・ツール"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名前"
+keytool \- 暗号化鍵、X\&.509証明書チェーンおよび信頼できる証明書を含むキーストア(データベース)を管理します。
+.SH "概要"
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBkeytool\fR [\fIcommands\fR]
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+\fIcommands\fR
+.RS 4
+コマンドを参照してください。これらのコマンドは、次のようにタスク別に分類されます。
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+キーストアへのデータの作成または追加
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\-gencert
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\-genkeypair
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\-genseckey
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\-importcert
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\-importpassword
+.RE
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+別のキーストアの内容のインポート
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\-importkeystore
+.RE
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+証明書リクエストの生成
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\-certreq
+.RE
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+データのエクスポート
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\-exportcert
+.RE
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+データの表示
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\-list
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\-printcert
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\-printcertreq
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\-printcrl
+.RE
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+キーストアの管理
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\-storepasswd
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\-keypasswd
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\-delete
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\-changealias
+.RE
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+ヘルプの表示
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\-help
+.RE
+.RE
+.RE
+.SH "説明"
+.PP
+\fBkeytool\fRコマンドは、鍵と証明書を管理するためのユーティリティです。これにより、ユーザーは自分の公開鍵と秘密鍵のペアおよび関連する証明書を管理し、デジタル署名を使用した自己認証(他のユーザーまたはサービスに対して自分自身を認証すること)や、データの整合性と証明書に関するサービスを利用することができます。\fBkeytool\fRコマンドでは、通信しているピアの公開鍵をキャッシュすることもできます(証明書のフォームで)。
+.PP
+証明書とは、あるエンティティ(人物、会社など)からのデジタル署名付きの文書のことです。証明書には、他のあるエンティティの公開鍵(およびその他の情報)が特別な値を持っていることが書かれています。(証明書を参照してください。)データにデジタル署名が付いている場合は、デジタル署名を検証することで、データの整合性およびデータが本物であることをチェックできます。データの整合性とは、データが変更されたり、改変されたりしていないことを意味します。また、データが本物であるとは、そのデータが、データを作成して署名したと称する人物から渡されたデータであることを意味します。
+.PP
+また、\fBkeytool\fRコマンドを使用すれば、対称暗号化/復号化(DES)で使用される秘密鍵およびパスフレーズを管理することもできます。
+.PP
+\fBkeytool\fRコマンドは、鍵と証明書をキーストアに格納します。キーストアの別名を参照してください。
+.SH "コマンドとオプションに関する注意"
+.PP
+様々なコマンドとその説明については、コマンドを参照してください。
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+どのコマンド名およびオプション名にも先頭にマイナス記号(\-)が付きます。
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+各コマンドのオプションは任意の順序で指定できます。
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+イタリックになっていないすべての項目、または中カッコか角カッコで囲まれているすべての項目は、そのとおりに指定する必要があります。
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+オプションを囲む中カッコは、そのオプションをコマンド行で指定しなかった場合に、デフォルト値が使用されることを意味します。オプションのデフォルト値を参照してください。中カッコは、\fB\-v\fR、\fB\-rfc\fRおよび\fB\-J\fRオプションを囲むためにも使用されますが、これらのオプションはコマンド行で指定された場合にのみ意味を持ちます。指定されていない場合以外、デフォルト値はありません。
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+オプションを囲む角カッコは、そのオプションをコマンド行で指定しなかった場合に、値の入力を求められることを意味します。\fB\-keypass\fRオプションの場合、オプションをコマンド行で指定しなかった場合は、\fBkeytool\fRコマンドがまずキーストアのパスワードを使用して非公開/秘密鍵の復元を試みます。この試みが失敗した場合、\fBkeytool\fRコマンドにより、非公開/秘密鍵のパスワードの入力を求められます。
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+イタリックの項目の実際の値(オプションの値)は、指定する必要があります。たとえば、\fB\-printcert\fRコマンドの形式は次のとおりです。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBkeytool \-printcert {\-file \fR\fB\fIcert_file\fR\fR\fB} {\-v}\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+\fB\-printcert\fRコマンドを指定する場合は、\fIcert_file\fRを実際のファイル名で置き換えます。例:
+\fBkeytool \-printcert \-file VScert\&.cer\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+オプションの値に空白(スペース)が含まれている場合は、値を引用符で囲む必要があります。
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fB\-help\fRオプションがデフォルトです。\fBkeytool\fRコマンドは、\fBkeytool \-help\fRと同じです。
+.RE
+.SH "オプションのデフォルト値"
+.PP
+次の例で、様々なオプション値のデフォルト値を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-alias "mykey"\fR
+\fB \fR
+\fB\-keyalg\fR
+\fB "DSA" (when using \-genkeypair)\fR
+\fB "DES" (when using \-genseckey)\fR
+\fB \fR
+\fB\-keysize\fR
+\fB 2048 (when using \-genkeypair and \-keyalg is "RSA")\fR
+\fB 1024 (when using \-genkeypair and \-keyalg is "DSA")\fR
+\fB 256 (when using \-genkeypair and \-keyalg is "EC")\fR
+\fB 56 (when using \-genseckey and \-keyalg is "DES")\fR
+\fB 168 (when using \-genseckey and \-keyalg is "DESede")\fR
+\fB \fR
+\fB\-validity 90\fR
+\fB \fR
+\fB\-keystore \fR
+\fB \fR
+\fB\-storetype \fR
+\fB \fR
+\fB\-file\fR
+\fB stdin (if reading)\fR
+\fB stdout (if writing)\fR
+\fB \fR
+\fB\-protected false\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+公開/秘密鍵ペアの生成において、署名アルゴリズム(\fB\-sigalg\fRオプション)は、基になる秘密鍵のアルゴリズムから派生します。
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+基になる秘密鍵がDSAタイプである場合は、\fB\-sigalg\fRオプションのデフォルト値はSHA1withDSAになります。
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+基になる秘密鍵がRSAタイプである場合は、\fB\-sigalg\fRオプションのデフォルト値はSHA256withRSAになります。
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+基になる秘密鍵がECタイプである場合は、\fB\-sigalg\fRオプションのデフォルト値はSHA256withECDSAになります。
+.RE
+.PP
+\fB\-keyalg\fRおよび\fB\-sigalg\fR引数の完全なリストについては、
+http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/crypto/CryptoSpec\&.html#AppAの「Java Cryptography Architecture (JCA) Reference Guide」を参照してください。
+.SH "一般オプション"
+.PP
+\fB\-v\fRオプションは、\fB\-help\fRコマンドを除くすべてのコマンドで使用できます。\fB\-v\fRオプションを指定した場合、コマンドは冗長モードで実行され、詳細な情報が出力されます。
+.PP
+任意のコマンドで指定できる\fB\-Jjavaoption\fR引数もあります。\fB\-Jjavaoption\fRを指定した場合、指定された\fBjavaoption\fR文字列がJavaインタプリタに直接渡されます。このオプションには、空白を含めることはできません。このオプションは、実行環境またはメモリー使用を調整する場合に便利です。指定できるインタプリタ・オプションを一覧表示するには、コマンド行で\fBjava \-h\fRまたは\fBjava \-X\fRと入力してください。
+.PP
+次のオプションは、キーストアに対する操作を行うすべてのコマンドで指定できます。
+.PP
+\-storetype \fIstoretype\fR
+.RS 4
+この修飾子は、インスタンスを生成するキーストアのタイプを指定します。
+.RE
+.PP
+\-keystore \fIkeystore\fR
+.RS 4
+キーストアの場所を指定します。
+.sp
+特定の\fBkeytool\fRコマンドを実行する際に、JKS
+\fBstoretype\fRが使用され、かつキーストア・ファイルがまだ存在していなかった場合、新しいキーストア・ファイルが作成されます。たとえば、\fBkeytool \-genkeypair\fRの呼出し時に\fB\-keystore\fRオプションが指定されなかった場合、\fB\&.keystore\fRという名前のデフォルト・キーストア・ファイルがユーザーのホーム・ディレクトリ内にまだ存在していなければ、そこに作成されます。同様に、\fB\-keystore ks_file\fRというオプションが指定されてもそのks_fileが存在しなかった場合、そのファイルが作成されます。JKS
+\fBstoretype\fRの詳細は、\fIの\fRKeyStoreの実装キーストアの別名に関する項を参照してください。
+.sp
+\fB\-keystore\fRオプションからの入力ストリームは、\fBKeyStore\&.load\fRメソッドに渡されます。URLとして\fBNONE\fRが指定されている場合は、nullのストリームが\fBKeyStore\&.load\fRメソッドに渡されます。\fBNONE\fRは、KeyStoreがファイルベースではない場合に指定してください。たとえば、ハードウェア・トークン・デバイス上に存在している場合などです。
+.RE
+.PP
+\-storepass[:\fIenv\fR| :\fIfile\fR] argument
+.RS 4
+キーストアの整合性を保護するために使用するパスワードを指定します。
+.sp
+修飾子\fBenv\fRまたは\fBfile\fRを指定しない場合、パスワードの値は\fBargument\fRになります。この値は、6文字以上にする必要があります。それ以外の場合、パスワードは次のようにして取得されます。
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fBenv\fR:
+\fBargument\fRという名前の環境変数からパスワードを取得します。
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fBfile\fR: argumentという名前のファイルからパスワードを取得します。
+.RE
+.sp
+\fB注意:\fR
+\fB\-keypass\fR、\fB\-srckeypass\fR、\-\fBdestkeypass\fR、\fB\-srcstorepass\fR、\fB\-deststorepass\fRなどのパスワードを必要とするその他のオプションはすべて、\fIenv\fRおよび\fIfile\fR修飾子を受け付けます。パスワード・オプションと修飾子は、必ずコロン(:)で区切ってください。
+.sp
+パスワードは、キーストアの内容にアクセスするすべてのコマンドで使用されます。この種のコマンドを実行するときに、コマンド行で\fB\-storepass\fRオプションを指定しなかった場合は、パスワードの入力を求められます。
+.sp
+キーストアから情報を取得する場合、パスワードは省略可能です。パスワードが指定されていない場合は、取得した情報の整合性を検証できず、警告が表示されます。
+.RE
+.PP
+\-providerName \fIprovider_name\fR
+.RS 4
+セキュリティ・プロパティ・ファイル内に含まれる暗号化サービス・プロバイダ名を特定するために使用されます。
+.RE
+.PP
+\-providerClass \fIprovider_class_name\fR
+.RS 4
+暗号化サービス・プロバイダがセキュリティ・プロパティ・ファイルに指定されていないときは、そのマスター・クラス・ファイルの名前を指定するときに使用されます。
+.RE
+.PP
+\-providerArg \fIprovider_arg\fR
+.RS 4
+\fB\-providerClass\fRオプションとともに使用され、\fBprovider_class_name\fRのコンストラクタのオプションの文字列入力引数を表します。
+.RE
+.PP
+\-protected
+.RS 4
+\fBtrue\fRまたは\fBfalse\fRのいずれか。パスワードを専用PINリーダーなどの保護された認証パス経由で指定する必要がある場合は、この値を\fBtrue\fRに指定する必要があります。\fB\-importkeystore\fRコマンドには2つのキーストアが関連しているため、ソース・キーストアと宛先キーストアにそれぞれ次の2つのオプション、\fB\-srcprotected\fRと\-\fBdestprotected\fRが用意されています。
+.RE
+.PP
+\-ext \fI{name{:critical} {=value}}\fR
+.RS 4
+X\&.509証明書エクステンションを示します。このオプションを\fB\-genkeypair\fRおよび\fB\-gencert\fRで使用して、生成される証明書または\fB\-certreq\fRにエクステンションを埋め込み、証明書リクエストでリクエストされるエクステンションを示すことができます。このオプションは複数回指定できます。\fBname\fR引数には、サポートされているエクステンション名(名前付きエクステンションを参照)または任意のOID番号を指定できます。指定されている場合、\fBvalue\fR引数はエクステンションの引数を指します。\fIvalue\fRを省略した場合、エクステンションのデフォルト値またはエクステンションが引数を必要としないことを示します。\fB:critical\fR修飾子が指定された場合、エクステンションの\fBisCritical\fR属性は\fBtrue\fRで、指定されない場合は\fBfalse\fRです。\fB:critical\fRのかわりに\fB:c\fRを使用できます。
+.RE
+.SH "名前付きエクステンション"
+.PP
+\fBkeytool\fRコマンドは、次の名前のエクステンションをサポートしています。名前の大/小文字は区別されません。
+.PP
+BCまたはBasicContraints
+.RS 4
+\fB値\fR: 完全な形式は、\fBca:{true|false}[,pathlen:]\fRまたは\fB\fR(\fBca:true,pathlen:\fRの短縮形)です。<\fBlen\fR>を省略すると、\fBca:true\fRの意味になります。
+.RE
+.PP
+KUまたはKeyUsage
+.RS 4
+\fB値\fR:
+\fBusage\fR(\fBusage\fR)*、\fIusage\fRには\fBdigitalSignature\fR、\fBnonRepudiation\fR
+(contentCommitment)、\fBkeyEncipherment\fR、\fBdataEncipherment\fR、\fBkeyAgreement\fR、\fBkeyCertSign\fR、\fBcRLSign\fR、\fBencipherOnly\fR、\fBdecipherOnly\fRのいずれかを指定できます。\fIusage\fR引数は、不明確にならないかぎり、最初の数文字(\fBdigitalSignature\fRの場合は\fBdig\fR)またはキャメルケース・スタイル(\fBdigitalSignature\fRの場合は\fBdS\fR、\fBcRLSign\fRの場合は\fBcRLS\fR)で省略表記できます。\fBusage\fR値は、大文字と小文字が区別されます。
+.RE
+.PP
+EKUまたはExtendedKeyUsage
+.RS 4
+\fB値\fR:
+\fBusage\fR(\fBusage\fR)*、\fIusage\fRには\fBanyExtendedKeyUsage\fR、\fBserverAuth\fR、\fBclientAuth\fR、\fBcodeSigning\fR、\fBemailProtection\fR、\fBtimeStamping\fR、\fBOCSPSigning\fRまたは任意の\fIOID文字列\fRのいずれかを指定できます。\fIusage\fR引数は、不明確にならないかぎり、最初の数文字またはキャメルケース・スタイルで省略表記できます。\fBusage\fR値は、大文字と小文字が区別されます。
+.RE
+.PP
+SANまたはSubjectAlternativeName
+.RS 4
+\fB値\fR:
+\fBtype\fR:\fBvalue\fR(t\fBype:value\fR)*、\fBtype\fRには\fBEMAIL\fR、\fBURI\fR、\fBDNS\fR、\fBIP\fRまたは\fBOID\fRを指定できます。\fBvalue\fR引数は、\fBtype\fRの文字列形式の値です。
+.RE
+.PP
+IANまたはIssuerAlternativeName
+.RS 4
+\fB値\fR:
+\fBSubjectAlternativeName\fRと同じです。
+.RE
+.PP
+SIAまたはSubjectInfoAccess
+.RS 4
+\fB値\fR:
+\fBmethod\fR:\fBlocation\-type\fR:\fBlocation\-value\fR
+(\fBmethod:location\-type\fR:\fBlocation\-value\fR)*、\fBmethod\fRには\fBtimeStamping\fR、\fBcaRepository\fRまたは任意のOIDを指定できます。\fBlocation\-type\fRおよび\fBlocation\-value\fR引数には、\fBSubjectAlternativeName\fRエクステンションでサポートされる任意の\fBtype\fR:\fBvalue\fRを指定できます。
+.RE
+.PP
+AIAまたはAuthorityInfoAccess
+.RS 4
+\fB値\fR:
+\fBSubjectInfoAccess\fRと同じです。\fBmethod\fR引数には、\fBocsp\fR、\fBcaIssuers\fRまたは任意のOIDを指定できます。
+.RE
+.PP
+\fBname\fRがOIDの場合、OCTET STRINGタイプと長さのバイトを除外したエクステンションについては、値は\fBextnValue\fRの16進ダンプのDERエンコーディングです。HEX文字列では、標準の16進数(0\-9、a\-f、A\-F)以外の文字は無視されます。したがって、01:02:03:04と01020304の両方とも同一の値として受け付けられます。値がない場合、エクステンションの値フィールドは空になります。
+.PP
+\fB\-gencert\fRでのみ使用する\fBhonored\fRという特別な名前は、証明書リクエストに含まれるエクステンションを優先する方法を示します。この名前の値は、\fBall\fR(リクエストされるすべてのエクステンションが優先される)、\fBname{:[critical|non\-critical]}\fR(名前付きのエクステンションが優先されるが、別の\fBisCritical\fR属性を使用する)、および\fB\-name\fR(\fBall\fRとともに使用し、例外を示す)のカンマ区切りリストです。デフォルトでは、リクエストされるエクステンションは優先されません。
+.PP
+\fB\-ext honored\fRオプションに加え、別の名前の、またはOID
+\fB\-ext\fRのオプションを指定した場合は、このエクステンションが、すでに優先されているエクステンションに追加されます。ただし、この名前(またはOID)を優先される値でも使用した場合は、その値と重要性がリクエストに含まれるものをオーバーライドします。
+.PP
+\fBsubjectKeyIdentifier\fRエクステンションは常に作成されます。自己署名でない証明書の場合は、\fBauthorityKeyIdentifier\fRが作成されます。
+.PP
+\fB注意:\fR
+ユーザーは、エクステンション(および証明書の他のフィールド)の組合せによっては、インターネットの標準に準拠しない場合があることに注意してください。証明書の準拠に関する警告を参照してください。
+.SH "コマンド"
+.PP
+\-gencert
+.RS 4
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-rfc} {\-infile \fR\fB\fIinfile\fR\fR\fB} {\-outfile \fR\fB\fIoutfile\fR\fR\fB} {\-alias \fR\fB\fIalias\fR\fR\fB} {\-sigalg \fR\fB\fIsigalg\fR\fR\fB}\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-dname \fR\fB\fIdname\fR\fR\fB} {\-startdate \fR\fB\fIstartdate\fR\fR\fB {\-ext \fR\fB\fIext\fR\fR\fB}* {\-validity \fR\fB\fIvalDays\fR\fR\fB}\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB[\-keypass \fR\fB\fIkeypass\fR\fR\fB] {\-keystore \fR\fB\fIkeystore\fR\fR\fB} [\-storepass \fR\fB\fIstorepass\fR\fR\fB]\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-storetype \fR\fB\fIstoretype\fR\fR\fB} {\-providername \fR\fB\fIprovider_name\fR\fR\fB}\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-providerClass \fR\fB\fIprovider_class_name\fR\fR\fB {\-providerArg \fR\fB\fIprovider_arg\fR\fR\fB}}\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-v} {\-protected} {\-Jjavaoption}\fR
+.fi
+.if n \{\
+.RE
+.\}
+証明書リクエスト・ファイル(\fBkeytool\fR
+\fB\-certreq\fRコマンドで作成可能)に対するレスポンスとして証明書を生成します。このコマンドは、\fIinfile\fRから(省略した場合は、標準入力から)リクエストを読み込み、別名の秘密鍵を使用してそのリクエストに署名して、X\&.509証明書を\fIoutfile\fRに(省略した場合は、標準出力に)出力します。\fB\-rfc\fRを指定した場合、出力形式はBASE64符号化のPEMになります。それ以外の場合は、バイナリDERが作成されます。
+.sp
+\fBsigalg\fR値には、証明書に署名を付けるときに使用するアルゴリズムを指定します。\fBstartdate\fR引数は、証明書の有効開始日時です。\fBvalDays\fR引数は、証明書の有効日数を示します。
+.sp
+\fBdname\fRを指定すると、生成される証明書の主体として使用されます。それ以外の場合は、証明書リクエストからの名前が使用されます。
+.sp
+\fBext\fR値は、証明書に埋め込まれるX\&.509エクステンションを示します。\fB\-ext\fRの構文については、一般オプションを参照してください。
+.sp
+\fB\-gencert\fRオプションを使用すると、証明書チェーンを作成できます。次の例では、\fBe1\fRという証明書を作成します。この証明書の証明書チェーンには、3つの証明書が含まれています。
+.sp
+次のコマンドは、\fBca\fR、\fBca1\fR、\fBca2\fRおよび\fBe1\fRの4つの鍵ペアを作成します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBkeytool \-alias ca \-dname CN=CA \-genkeypair\fR
+\fBkeytool \-alias ca1 \-dname CN=CA \-genkeypair\fR
+\fBkeytool \-alias ca2 \-dname CN=CA \-genkeypair\fR
+\fBkeytool \-alias e1 \-dname CN=E1 \-genkeypair\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+次の2つのコマンドは、署名付き証明書のチェーンを作成します。\fBca\fRは\fBca1\fRに署名し、\fBca1\fRは\fBca2\fRに署名します。すべて自己発行です。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBkeytool \-alias ca1 \-certreq |\fR
+\fB keytool \-alias ca \-gencert \-ext san=dns:ca1 |\fR
+\fB keytool \-alias ca1 \-importcert\fR
+
+\fBkeytool \-alias ca2 \-certreq |\fR
+\fB $KT \-alias ca1 \-gencert \-ext san=dns:ca2 |\fR
+\fB $KT \-alias ca2 \-importcert\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+次のコマンドは、証明書\fBe1\fRを作成してファイル\fBe1\&.cert\fRに格納します。この証明書は\fBca2\fRによって署名されます。その結果、\fBe1\fRの証明書チェーンには\fBca\fR、\fBca1\fRおよび\fBca2\fRが含まれることになります。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBkeytool \-alias e1 \-certreq | keytool \-alias ca2 \-gencert > e1\&.cert\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-genkeypair
+.RS 4
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-alias \fR\fB\fIalias\fR\fR\fB} {\-keyalg \fR\fB\fIkeyalg\fR\fR\fB} {\-keysize \fR\fB\fIkeysize\fR\fR\fB} {\-sigalg \fR\fB\fIsigalg\fR\fR\fB}\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB[\-dname \fR\fB\fIdname\fR\fR\fB] [\-keypass \fR\fB\fIkeypass\fR\fR\fB] {\-startdate \fR\fB\fIvalue\fR\fR\fB} {\-ext \fR\fB\fIext\fR\fR\fB}*\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-validity \fR\fB\fIvalDays\fR\fR\fB} {\-storetype \fR\fB\fIstoretype\fR\fR\fB} {\-keystore \fR\fB\fIkeystore\fR\fR\fB}\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB[\-storepass \fR\fB\fIstorepass\fR\fR\fB]\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-providerClass \fR\fB\fIprovider_class_name\fR\fR\fB {\-providerArg \fR\fB\fIprovider_arg\fR\fR\fB}}\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-v} {\-protected} {\-Jjavaoption}\fR
+.fi
+.if n \{\
+.RE
+.\}
+鍵のペア(公開鍵および関連する秘密鍵)を生成します。公開鍵はX\&.509 v3自己署名証明書でラップされます。証明書は、単一の要素を持つ証明書チェーンとして格納されます。この証明書チェーンと秘密鍵は、aliasで特定される新しいキーストア・エントリに格納されます。
+.sp
+\fBkeyalg\fR値は鍵ペアの生成に使用するアルゴリズムを、\fBkeysize\fR値は生成する各鍵のサイズを、それぞれ指定します。\fBsigalg\fR値は、自己署名証明書に署名を付けるために使用するアルゴリズムを指定します。このアルゴリズムは\fBkeyalg\fR値と互換性がある必要があります。
+.sp
+\fBdname\fR値には、\fBalias\fR値に関連付け、自己署名証明書のissuerフィールドとsubjectフィールドとして使用するX\&.500識別名を指定します。コマンド行で識別名を指定しなかった場合は、識別名の入力を求められます。
+.sp
+\fBkeypass\fR値には、生成される鍵のペアのうち、秘密鍵を保護するのに使用するパスワードを指定します。パスワードを指定しなかった場合は、パスワードの入力を求められます。このとき、[Return]キーを押すと、キーストアのパスワードと同じパスワードが鍵のパスワードに設定されます。\fBkeypass\fR値は、6文字以上にする必要があります。
+.sp
+\fBstartdate\fR値には、証明書の発行時刻を指定します。これは、X\&.509証明書の「Validity」フィールドの「Not Before」値とも呼ばれます。
+.sp
+オプションの値は、次の2つの形式のいずれかで設定できます。
+.sp
+\fB([+\-]nnn[ymdHMS])+\fR
+.sp
+\fB[yyyy/mm/dd] [HH:MM:SS]\fR
+.sp
+最初の形式では、発行時刻は、指定される値の分、現在の時刻から移ります。指定される値は、一連の下位の値を連結したものになります。下位の各値で、プラス記号(「+」)は時間が進むことを、マイナス記号(「\-」)は時間が戻ることを意味しています。移る時間は\fBnnn\fRで、単位は年、月、日、時間、分または秒です(それぞれ、1文字の\fBy\fR、\fBm\fR、\fBd\fR、\fBH\fR、\fBM\fRまたは\fBS\fR」で示されています)。下位の各値で\fBjava\&.util\&.GregorianCalendar\&.add(int field, int amount)\fRメソッドを使用することで、発行時刻の追加の値が左から右へ計算されます。たとえば、指定すると、発行時刻は次のようになります。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBCalendar c = new GregorianCalendar();\fR
+\fBc\&.add(Calendar\&.YEAR, \-1);\fR
+\fBc\&.add(Calendar\&.MONTH, 1);\fR
+\fBc\&.add(Calendar\&.DATE, \-1);\fR
+\fBreturn c\&.getTime()\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+2番目の形式では、ユーザーは、年/月/日と時間:分:秒の2つの部分で厳密な開始時刻を設定します(地元の時間帯を使用)。ユーザーは、1つの部分のみを指定できます。これは、もう1つの部分は現在の日付(または時刻)と同じになるということです。ユーザーは、形式の定義に示されているように、桁数を厳密に指定する必要があります(短い場合は0で埋めます)。日付と時刻の両方が指定された状態で、2つの部分の間に空白文字が1つ(1つのみ)あります。時間は常に24時間形式で指定してください。
+.sp
+オプションを指定しないと、開始日付は現在の時刻になります。オプションは、最大で1回指定できます。
+.sp
+\fBvalDays\fRの値には、証明書の有効日数を指定します(\fB\-startdate\fRで指定された日付、または\fB\-startdate\fRが指定されていない場合は現在の日付から始まります)。
+.sp
+このコマンドは、以前のリリースでは\fB\-genkey\fRという名前でした。このリリースでは、引き続き古い名前がサポートされています。今後は、新しい名前\fB\-genkeypair\fRが優先されます。
+.RE
+.PP
+\-genseckey
+.RS 4
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-alias \fR\fB\fIalias\fR\fR\fB} {\-keyalg \fR\fB\fIkeyalg\fR\fR\fB} {\-keysize \fR\fB\fIkeysize\fR\fR\fB} [\-keypass \fR\fB\fIkeypass\fR\fR\fB]\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-storetype \fR\fB\fIstoretype\fR\fR\fB} {\-keystore \fR\fB\fIkeystore\fR\fR\fB} [\-storepass \fR\fB\fIstorepass\fR\fR\fB]\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-providerClass \fR\fB\fIprovider_class_name\fR\fR\fB {\-providerArg \fR\fB\fIprovider_arg\fR\fR\fB}} {\-v}\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-protected} {\-Jjavaoption}\fR
+.fi
+.if n \{\
+.RE
+.\}
+秘密鍵を生成し、それを新しい\fBKeyStore\&.SecretKeyEntry\fR(\fBalias\fRで特定される)内に格納します。
+.sp
+\fBkeyalg\fR値は鍵ペアの生成に使用するアルゴリズムを、\fBkeysize\fR値は生成する各鍵のサイズを、それぞれ指定します。\fBkeypass\fR値は、秘密鍵を保護するパスワードです。パスワードを指定しなかった場合は、パスワードの入力を求められます。このとき、[Return]キーを押すと、\fBkeystore\fRのパスワードと同じパスワードが鍵のパスワードに設定されます。\fBkeypass\fR値は、6文字以上にする必要があります。
+.RE
+.PP
+\-importcert
+.RS 4
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-alias \fR\fB\fIalias\fR\fR\fB} {\-file \fR\fB\fIcert_file\fR\fR\fB} [\-keypass \fR\fB\fIkeypass\fR\fR\fB] {\-noprompt} {\-trustcacerts}\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-storetype \fR\fB\fIstoretype\fR\fR\fB} {\-keystore \fR\fB\fIkeystore\fR\fR\fB} [\-storepass \fR\fB\fIstorepass\fR\fR\fB]\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-providerName \fR\fB\fIprovider_name\fR\fR\fB}\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-providerClass \fR\fB\fIprovider_class_name\fR\fR\fB {\-providerArg \fR\fB\fIprovider_arg\fR\fR\fB}}\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-v} {\-protected} {\-Jjavaoption}\fR
+.fi
+.if n \{\
+.RE
+.\}
+ファイル\fBcert_file\fRから証明書または証明書チェーン(証明書チェーンの場合は、PKCS#7形式の応答または一連のX\&.509証明書で提供されるもの)を読み込み、\fBalias\fRによって特定される\fBkeystore\fRエントリに格納します。ファイルが指定されていない場合は、\fBstdin\fRから証明書または証明書チェーンを読み込みます。
+.sp
+\fBkeytool\fRコマンドでは、X\&.509 v1、v2、v3の証明書、およびPKCS#7形式の証明書から構成されているPKCS#7形式の証明書チェーンをインポートできます。インポートするデータは、バイナリ符号化方式、または出力可能符号化方式(Base64符号化とも呼ばれる)のどちらかで提供する必要があります。出力可能符号化方式は、インターネットRFC 1421証明書符号化規格で定義されています。この符号化方式の場合、証明書は\fB\-\fR\fB\-\-\-\-BEGIN\fRで始まる文字列で開始され、\fB\-\-\-\-\-END\fRで始まる文字列で終了する必要があります。
+.sp
+証明書は、信頼できる証明書のリストに追加するため、および認証局(CA)に証明書署名リクエストを送信した結果としてCAから受信した証明書応答をインポートするため(\fBの\fR\-certreqコマンドオプションを参照)という2つの理由でインポートします。
+.sp
+どちらのタイプのインポートを行うかは、\fB\-alias\fRオプションの値によって指定します。別名がキー・エントリをポイントしない場合、\fBkeytool\fRコマンドはユーザーが信頼できる証明書エントリを追加しようとしているものとみなします。この場合、別名がキーストア内に存在していないことが必要です。別名がすでに存在している場合、その別名の信頼できる証明書がすでに存在することになるので、\fBkeytool\fRコマンドはエラーを出力し、証明書のインポートを行いません。別名がキー・エントリをポイントする場合、\fBkeytool\fRコマンドはユーザーが証明書応答をインポートしようとしているものとみなします。
+.RE
+.PP
+\-importpassword
+.RS 4
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-alias \fR\fB\fIalias\fR\fR\fB} [\-keypass \fR\fB\fIkeypass\fR\fR\fB] {\-storetype \fR\fB\fIstoretype\fR\fR\fB} {\-keystore \fR\fB\fIkeystore\fR\fR\fB}\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB[\-storepass \fR\fB\fIstorepass\fR\fR\fB]\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-providerClass \fR\fB\fIprovider_class_name\fR\fR\fB {\-providerArg \fR\fB\fIprovider_arg\fR\fR\fB}}\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-v} {\-protected} {\-Jjavaoption}\fR
+.fi
+.if n \{\
+.RE
+.\}
+パスフレーズをインポートし、\fBalias\fRで識別される新規\fBKeyStore\&.SecretKeyEntry\fRに格納します。パスフレーズは、標準入力ストリームを介して提供できます。または、ユーザーにそのプロンプトが表示されます。\fBkeypass\fRは、インポートされるパスフレーズの保護に使用されるパスワードです。パスワードを指定しなかった場合は、パスワードの入力を求められます。このとき、[Return]キーを押すと、\fBkeystore\fRのパスワードと同じパスワードが鍵のパスワードに設定されます。\fBkeypass\fRは、6文字以上にする必要があります。
+.RE
+.PP
+\-importkeystore
+.RS 4
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-srcstoretype \fR\fB\fIsrcstoretype\fR\fR\fB} {\-deststoretype \fR\fB\fIdeststoretype\fR\fR\fB}\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB[\-srcstorepass \fR\fB\fIsrcstorepass\fR\fR\fB] [\-deststorepass \fR\fB\fIdeststorepass\fR\fR\fB] {\-srcprotected}\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-destprotected} \fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-srcalias \fR\fB\fIsrcalias\fR\fR\fB {\-destalias \fR\fB\fIdestalias\fR\fR\fB} [\-srckeypass \fR\fB\fIsrckeypass\fR\fR\fB]} \fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB[\-destkeypass \fR\fB\fIdestkeypass\fR\fR\fB] {\-noprompt}\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-srcProviderName \fR\fB\fIsrc_provider_name\fR\fR\fB} {\-destProviderName \fR\fB\fIdest_provider_name\fR\fR\fB}\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-providerClass \fR\fB\fIprovider_class_name\fR\fR\fB {\-providerArg \fR\fB\fIprovider_arg\fR\fR\fB}} {\-v}\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-protected} {\-Jjavaoption}\fR
+.fi
+.if n \{\
+.RE
+.\}
+ソース・キーストアからターゲット・キーストアへ、単一のエントリまたはすべてのエントリをインポートします。
+.sp
+\fB\-srcalias\fRオプションが指定された場合、このコマンドは、その別名で特定される単一のエントリをターゲット・キーストアにインポートします。\fBdestalias\fR経由でターゲット別名が指定されなかった場合、\fBsrcalias\fRがターゲット別名として使用されます。ソースのエントリがパスワードで保護されていた場合、\fBsrckeypass\fRを使用してそのエントリが回復されます。\fIsrckeypass\fRが指定されなかった場合、\fBkeytool\fRコマンドは\fBsrcstorepass\fRを使用してそのエントリを回復しようとします。\fBsrcstorepass\fRが指定されなかったか正しくなかった場合、ユーザーはパスワードの入力を求められます。ターゲットのエントリは\fBdestkeypass\fRによって保護されます。\fBdestkeypass\fRが指定されなかった場合、ターゲット・エントリはソース・エントリのパスワードによって保護されます。たとえば、ほとんどのサード・パーティ・ツールでは、PKCS #12キーストアで\fBstorepass\fRと\fBkeypass\fRが同じである必要があります。これらのツールのPKCS #12キーストアを作成する場合は、常に\fB\-destkeypass\fRと\fB\-deststorepass\fRが同じになるように指定します。
+.sp
+\fB\-srcalias\fRオプションが指定されなかった場合、ソース・キーストア内のすべてのエントリがターゲット・キーストア内にインポートされます。各ターゲット・エントリは対応するソース・エントリの別名の下に格納されます。ソースのエントリがパスワードで保護されていた場合、\fBsrcstorepass\fRを使用してそのエントリが回復されます。\fBsrcstorepass\fRが指定されなかったか正しくなかった場合、ユーザーはパスワードの入力を求められます。ソース・キーストア内のあるエントリ・タイプがターゲット・キーストアでサポートされていない場合や、あるエントリをターゲット・キーストアに格納する際にエラーが発生した場合、ユーザーはそのエントリをスキップして処理を続行するか、または中止するかの選択を求められます。ターゲット・エントリはソース・エントリのパスワードによって保護されます。
+.sp
+ターゲット別名がターゲット・キーストア内にすでに存在していた場合、ユーザーは、そのエントリを上書きするか、あるいは異なる別名の下で新しいエントリを作成するかの選択を求められます。
+.sp
+
+\fB\-noprompt\fRオプションを指定した場合、ユーザーは新しいターゲット別名の入力を求められません。既存のエントリがそのターゲット別名で上書きされます。インポートできないエントリはスキップされ、警告が出力されます。
+.RE
+.PP
+\-printcertreq
+.RS 4
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-file \fR\fB\fIfile\fR\fR\fB}\fR
+.fi
+.if n \{\
+.RE
+.\}
+PKCS#10形式の証明書リクエストの内容を出力します。このリクエストは、\fBkeytool\fR
+\fB\-certreq\fRコマンドで生成できます。このコマンドは、ファイルからリクエストを読み取ります。ファイルが存在しない場合、リクエストは標準入力から読み取られます。
+.RE
+.PP
+\-certreq
+.RS 4
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-alias \fR\fB\fIalias\fR\fR\fB} {\-dname \fR\fB\fIdname\fR\fR\fB} {\-sigalg \fR\fB\fIsigalg\fR\fR\fB} {\-file \fR\fB\fIcertreq_file\fR\fR\fB}\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB[\-keypass \fR\fB\fIkeypass\fR\fR\fB] {\-storetype \fR\fB\fIstoretype\fR\fR\fB} {\-keystore \fR\fB\fIkeystore\fR\fR\fB}\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB[\-storepass \fR\fB\fIstorepass\fR\fR\fB] {\-providerName \fR\fB\fIprovider_name\fR\fR\fB}\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-providerClass \fR\fB\fIprovider_class_name\fR\fR\fB {\-providerArg \fR\fB\fIprovider_arg\fR\fR\fB}}\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-v} {\-protected} {\-Jjavaoption}\fR
+.fi
+.if n \{\
+.RE
+.\}
+PKCS#10形式を使用して証明書署名リクエスト(CSR)を生成します。
+.sp
+CSRは、証明書発行局(CA)に送信することを目的としたものです。CAは、証明書要求者を(通常はオフラインで)認証し、証明書または証明書チェーンを送り返します。この証明書または証明書チェーンは、キーストア内の既存の証明書チェーン(最初は1つの自己署名証明書から構成される)に置き換えて使用します。
+.sp
+aliasに関連付けられた秘密鍵は、PKCS#10証明書リクエストを作成するのに使用されます。秘密鍵にアクセスするには、正しいパスワードを指定する必要があります。コマンド行で\fBkeypass\fRを指定しておらず、秘密鍵のパスワードがキーストアのパスワードと異なる場合は、秘密鍵のパスワードの入力を求められます。\fBdname\fRが指定されている場合は、それがCSRで主体として使用されます。それ以外の場合は、別名に関連付けられたX\&.500識別名が使用されます。
+.sp
+\fBsigalg\fR値には、CSRに署名を付けるときに使用するアルゴリズムを指定します。
+.sp
+CSRは、ファイルcertreq_fileに格納されます。ファイルが指定されていない場合は、\fBstdout\fRにCSRが出力されます。
+.sp
+CAからのレスポンスをインポートするには、\fBimportcert\fRコマンドを使用します。
+.RE
+.PP
+\-exportcert
+.RS 4
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-alias \fR\fB\fIalias\fR\fR\fB} {\-file \fR\fB\fIcert_file\fR\fR\fB} {\-storetype \fR\fB\fIstoretype\fR\fR\fB} {\-keystore \fR\fB\fIkeystore\fR\fR\fB}\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB[\-storepass \fR\fB\fIstorepass\fR\fR\fB] {\-providerName \fR\fB\fIprovider_name\fR\fR\fB}\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-providerClass \fR\fB\fIprovider_class_name\fR\fR\fB {\-providerArg \fR\fB\fIprovider_arg\fR\fR\fB}}\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-rfc} {\-v} {\-protected} {\-Jjavaoption}\fR
+.fi
+.if n \{\
+.RE
+.\}
+\fIalias\fRに関連付けられた証明書をキーストアから読み込み、ファイルcert_fileに格納します。ファイルが指定されていない場合は、\fBstdout\fRに証明書が出力されます。
+.sp
+デフォルトでは、証明書はバイナリ符号化で出力されます。\fB\-rfc\fRオプションが指定されている場合、出力可能符号化方式の出力はインターネットRFC 1421証明書符号化規格で定義されます。
+.sp
+\fBalias\fRが、信頼できる証明書を参照している場合は、該当する証明書が出力されます。それ以外の場合、\fBalias\fRは、関連付けられた証明書チェーンを持つ鍵エントリを参照します。この場合は、チェーン内の最初の証明書が返されます。この証明書は、\fBalias\fRによって表されるエンティティの公開鍵を認証する証明書です。
+.sp
+このコマンドは、以前のリリースでは\fB\-export\fRという名前でした。このリリースでは、引き続き古い名前がサポートされています。今後は、新しい名前\fB\-exportcert\fRが優先されます。
+.RE
+.PP
+\-list
+.RS 4
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-alias \fR\fB\fIalias\fR\fR\fB} {\-storetype \fR\fB\fIstoretype\fR\fR\fB} {\-keystore \fR\fB\fIkeystore\fR\fR\fB} [\-storepass \fR\fB\fIstorepass\fR\fR\fB]\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-providerName \fR\fB\fIprovider_name\fR\fR\fB}\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-providerClass \fR\fB\fIprovider_class_name\fR\fR\fB {\-providerArg \fR\fB\fIprovider_arg\fR\fR\fB}}\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-v | \-rfc} {\-protected} {\-Jjavaoption}\fR
+.fi
+.if n \{\
+.RE
+.\}
+\fBalias\fRで特定されるキーストア・エントリの内容を\fBstdout\fRに出力します。\fBalias\fRが指定されていない場合は、キーストア全体の内容が表示されます。
+.sp
+このコマンドは、デフォルトでは証明書のSHA1フィンガープリントを表示します。
+\fB\-v\fRオプションが指定されている場合は、所有者、発行者、シリアル番号、拡張機能などの付加的な情報とともに、人間が読むことのできる形式で証明書が表示されます。\fB\-rfc\fRオプションが指定されている場合は、出力可能符号化方式で証明書の内容が出力されます。出力可能符号化方式は、インターネットRFC 1421証明書符号化規格で定義されています。
+.sp
+\fB\-v\fRオプションと\fB\-rfc\fRオプションを同時に指定することはできません。
+.RE
+.PP
+\-printcert
+.RS 4
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-file \fR\fB\fIcert_file\fR\fR\fB | \-sslserver \fR\fB\fIhost\fR\fR\fB[:\fR\fB\fIport\fR\fR\fB]} {\-jarfile \fR\fB\fIJAR_file\fR\fR\fB {\-rfc} {\-v}\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-Jjavaoption}\fR
+.fi
+.if n \{\
+.RE
+.\}
+ファイルcert_file、host:portにあるSSLサーバー、または署名付きJARファイル\fBJAR_file\fR(\fB\-jarfile\fRオプションを指定)から証明書を読み込み、人間が読むことのできる形式で証明書の内容を表示します。ポートが指定されていない場合は、標準のHTTPSポート443が想定されます。\fB\-sslserver\fRおよび\-fileオプションを同時に指定することはできません。それ以外の場合、エラーが報告されます。オプションが指定されていない場合は、\fBstdin\fRから証明書を読み込みます。
+.sp
+\fB\-rfc\fRが指定されている場合、\fBkeytool\fRコマンドは、インターネットRFC 1421証明書符号化標準で定義されているように、PEMモードで証明書を出力します。インターネットRFC 1421証明書符号化規格を参照してください。
+.sp
+ファイルまたは\fBstdin\fRから証明書を読み込む場合、その証明書は、インターネットRFC 1421証明書符号化標準で定義されているように、バイナリ符号化方式または出力可能符号化方式で表示できます。
+.sp
+SSLサーバーがファイアウォールの背後にある場合は、\fB\-J\-Dhttps\&.proxyHost=proxyhost\fRおよび\fB\-J\-Dhttps\&.proxyPort=proxyport\fRオプションをコマンド行で指定して、プロキシ・トンネリングを使用できます。http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide\&.htmlの
+「Java Secure Socket Extension (JSSE) Reference Guide」を参照してください
+.sp
+\fB注意:\fR
+このオプションはキーストアとは関係なく使用できます。
+.RE
+.PP
+\-printcrl
+.RS 4
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-file \fR\fB\fIcrl_\fR\fR\fB {\-v}\fR
+.fi
+.if n \{\
+.RE
+.\}
+ファイル\fBcrl_\fRから証明書失効リスト(CRL)を読み込みます。CRLは、発行したCAによって失効されたデジタル証明書のリストです。CAは、\fBcrl_\fRを生成します。
+.sp
+\fB注意:\fR
+このオプションはキーストアとは関係なく使用できます。
+.RE
+.PP
+\-storepasswd
+.RS 4
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB[\-new \fR\fB\fInew_storepass\fR\fR\fB] {\-storetype \fR\fB\fIstoretype\fR\fR\fB} {\-keystore \fR\fB\fIkeystore\fR\fR\fB}\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB[\-storepass \fR\fB\fIstorepass\fR\fR\fB] {\-providerName \fR\fB\fIprovider_name\fR\fR\fB}\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-providerClass \fR\fB\fIprovider_class_name\fR\fR\fB {\-providerArg \fR\fB\fIprovider_arg\fR\fR\fB}}\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-v} {\-Jjavaoption}\fR
+.fi
+.if n \{\
+.RE
+.\}
+キーストアの内容の整合性を保護するために使用するパスワードを変更します。\fBnew_storepass\fRには、新しいパスワードを指定します。new_storepassは、6文字以上である必要があります。
+.RE
+.PP
+\-keypasswd
+.RS 4
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-alias \fR\fB\fIalias\fR\fR\fB} [\-keypass \fR\fB\fIold_keypass\fR\fR\fB] [\-new \fR\fB\fInew_keypass\fR\fR\fB] {\-storetype \fR\fB\fIstoretype\fR\fR\fB}\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-keystore \fR\fB\fIkeystore\fR\fR\fB} [\-storepass \fR\fB\fIstorepass\fR\fR\fB] {\-providerName \fR\fB\fIprovider_name\fR\fR\fB}\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-providerClass \fR\fB\fIprovider_class_name\fR\fR\fB {\-providerArg \fR\fB\fIprovider_arg\fR\fR\fB}} {\-v}\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-Jjavaoption}\fR
+.fi
+.if n \{\
+.RE
+.\}
+\fBalias\fRによって特定される非公開/秘密鍵を保護するためのパスワードを、\fBold_keypass\fRから\fBnew_keypass\fRに変更します。new_keypassは、6文字以上である必要があります。
+.sp
+コマンド行で\fB\-keypass\fRオプションを指定しておらず、鍵のパスワードがキーストアのパスワードと異なる場合は、鍵のパスワードの入力を求められます。
+.sp
+コマンド行で\fB\-new\fRオプションを指定しなかった場合は、新しいパスワードの入力を求められます。
+.RE
+.PP
+\-delete
+.RS 4
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB[\-alias \fR\fB\fIalias\fR\fR\fB] {\-storetype \fR\fB\fIstoretype\fR\fR\fB} {\-keystore \fR\fB\fIkeystore\fR\fR\fB} [\-storepass \fR\fB\fIstorepass\fR\fR\fB]\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-providerName \fR\fB\fIprovider_name\fR\fR\fB} \fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-providerClass \fR\fB\fIprovider_class_name\fR\fR\fB {\-providerArg \fR\fB\fIprovider_arg\fR\fR\fB}}\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-v} {\-protected} {\-Jjavaoption}\fR
+.fi
+.if n \{\
+.RE
+.\}
+\fBalias\fRによって特定されるエントリをキーストアから削除します。コマンド行で別名を指定しなかった場合は、別名の入力を求められます。
+.RE
+.PP
+\-changealias
+.RS 4
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-alias \fR\fB\fIalias\fR\fR\fB} [\-destalias \fR\fB\fIdestalias\fR\fR\fB] [\-keypass \fR\fB\fIkeypass\fR\fR\fB] {\-storetype \fR\fB\fIstoretype\fR\fR\fB}\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-keystore \fR\fB\fIkeystore\fR\fR\fB} [\-storepass \fR\fB\fIstorepass\fR\fR\fB] {\-providerName \fR\fB\fIprovider_name\fR\fR\fB}\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-providerClass \fR\fB\fIprovider_class_name\fR\fR\fB {\-providerArg \fR\fB\fIprovider_arg\fR\fR\fB}} {\-v}\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB{\-protected} {\-Jjavaoption}\fR
+.fi
+.if n \{\
+.RE
+.\}
+指定された\fBalias\fRから新しい別名\fBdestalias\fRへ、既存のキーストア・エントリを移動します。ターゲット別名を指定しなかった場合、ターゲット別名の入力を求められます。元のエントリがエントリ・パスワードで保護されていた場合、\fB\-keypass\fRオプションでそのパスワードを指定できます。鍵パスワードが指定されなかった場合、\fBstorepass\fR(指定された場合)がまず試みられます。その試みが失敗すると、ユーザーはパスワードの入力を求められます。
+.RE
+.PP
+\-help
+.RS 4
+基本的なコマンドとそのオプションの一覧を表示します。
+.sp
+特定のコマンドの詳細を参照するには、次のように入力してください:
+\fBkeytool \-command_name \-help\fR。\fBcommand_name\fRはコマンドの名前です。
+.RE
+.SH "例"
+.PP
+この例では、公開/秘密鍵のペアおよび信頼できるエンティティからの証明書を管理するためのキーストアを作成する手順を示します。
+.SS "鍵のペアの生成"
+.PP
+まず、キーストアを作成して鍵のペアを生成します。単一行に入力する、次のようなコマンドを使用できます。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBkeytool \-genkeypair \-dname "cn=Mark Jones, ou=Java, o=Oracle, c=US"\fR
+\fB \-alias business \-keypass \fR
+\fB \-keystore /working/mykeystore\fR
+\fB \-storepass \-validity 180\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+コマンドは、workingディレクトリに\fBmykeystore\fRという名前のキーストアを作成し(キーストアはまだ存在していないと仮定)、作成したキーストアに、\fB\fRで指定したパスワードを割り当てます。生成する公開鍵と秘密鍵のペアに対応するエンティティの「識別名」は、通称がMark Jones、組織単位がJava、組織がOracle、2文字の国番号がUSです。公開鍵と秘密鍵のサイズはどちらも1024ビットで、鍵の作成にはデフォルトのDSA鍵生成アルゴリズムを使用します。
+.PP
+このコマンドは、デフォルトのSHA1withDSA署名アルゴリズムを使用して、公開鍵と識別名情報を含む自己署名証明書を作成します。証明書の有効期間は180日です。証明書は、別名\fBbusiness\fRで特定されるキーストア・エントリ内の秘密鍵に関連付けられます。秘密鍵には、\fB\fRで指定したパスワードが割り当てられます。
+.PP
+オプションのデフォルト値を使用する場合、コマンドは大幅に短くなります。この場合、オプションは不要です。デフォルト値を持つオプションでは、オプションを指定しなければデフォルト値が使用されます。必須値の入力を求められます。使用可能な値は次のとおりです。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBkeytool \-genkeypair\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+この場合は、\fBmykey\fRという別名でキーストア・エントリが作成され、新しく生成された鍵のペア、および90日間有効な証明書がこのエントリに格納されます。このエントリは、ホーム・ディレクトリ内の\fB\&.keystore\fRという名前のキーストアに置かれます。キーストアは、まだ存在していない場合に作成されます。識別名情報、キーストアのパスワードおよび秘密鍵のパスワードの入力を求められます。
+.PP
+以降では、オプションを指定しないで\fB\-genkeypair\fRコマンドを実行したものとして例を示します。情報の入力を求められた場合は、最初に示した\fB\-genkeypair\fRコマンドの値を入力したものとします。たとえば識別名には\fBcn=Mark Jones\fR、\fBou=Java\fR、\fBo=Oracle\fR、\fBc=US\fRと指定します。
+.SS "CAからの署名付き証明書のリクエスト"
+.PP
+自己署名証明書を作成する鍵のペアの生成。証明書に認証局(CA)の署名が付いていれば、他のユーザーから証明書が信頼される可能性も高くなります。CAの署名を取得するには、まず、証明書署名リクエスト(CSR)を生成します。たとえば、次のようにします。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBkeytool \-certreq \-file MarkJ\&.csr\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+CSR(デフォルト別名\fBmykey\fRによって特定されるエンティティのCSR)が作成され、MarkJ\&.csrという名前のファイルに置かれます。このファイルをCA (VeriSignなど)に提出します。CAは要求者を(通常はオフラインで)認証し、要求者の公開鍵を認証した署名付きの証明書を送り返します。場合によっては、CAが証明書のチェーンを返すこともあります。証明書のチェーンでは、各証明書がチェーン内のその前の署名者の公開鍵を認証します。
+.SS "CAからの証明書のインポート"
+.PP
+作成した自己署名証明書は、証明書チェーンで置き換える必要があります。証明書チェーンでは、各証明書が、「ルート」CAを起点とするチェーン内の次の証明書の署名者の公開鍵を認証します。
+.PP
+CAからの証明書応答をインポートするには、キーストアか、\fBcacerts\fRキーストア・ファイル内に1つ以上の信頼できる証明書がある必要があります。コマンドの\fB\-importcert\fRを参照してください。
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+証明応答が証明書チェーンの場合は、チェーンの最上位証明書が必要です。CAの公開鍵を認証するルートCA証明書。
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+証明書応答が単一の証明書の場合は、発行CA(署名した)の証明書が必要です。その証明書が自己署名でない場合は、その署名者の証明書が必要であり、このようにして自己署名ルート証明書が必要になります。
+.RE
+.PP
+\fBcacerts\fRキーストア・ファイルは、いくつかのVeriSignルートCA証明書を含んだ状態で出荷されているので、VeriSignの証明書を、信頼できる証明書としてキーストア内にインポートする必要がない場合があります。ただし、他のCAに対して署名付き証明書をリクエストしていて、このCAの公開鍵を認証する証明書が、\fBcacerts\fRにまだ追加されていない場合は、該当するCAからの証明書を、「信頼できる証明書」としてインポートする必要があります。
+.PP
+通常、CAからの証明書は、自己署名証明書、または他のCAによって署名された証明書です(後者の場合は、該当する他のCAの公開鍵を認証する証明書が必要)。ABC, Inc\&.,がCAで、ABCから自己署名証明書であるA\fBBCCA\&.cer\fRという名前のファイルを取得したとします(この証明書はCAの公開鍵を認証します)。信頼できる証明書として証明書をインポートするときは、証明書が有効であることを確認する必要があります。まず、証明書の内容を表示し、\fBkeytool \-printcert\fRコマンドを使用するか、または\fB\-noprompt\fRオプションを指定しないで\fBkeytool \-importcert\fRコマンドを使用し、表示された証明書のフィンガープリントが、期待されるフィンガープリントと一致するかどうかを確認します。証明書を送信した人物に連絡し、この人物が提示した(または安全な公開鍵のリポジトリによって提示される)フィンガープリントと、上のコマンドで表示されたフィンガープリントとを比較します。フィンガープリントが一致すれば、送信途中で他の何者か(攻撃者など)による証明書のすり替えが行われていないことを確認できます。送信途中でこの種の攻撃が行われていた場合、チェックを行わずに証明書をインポートすると、攻撃者によって署名されたすべてのものを信頼することになります。
+.PP
+証明書が有効であると信頼する場合は、次のコマンドでキーストアに追加できます。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBkeytool \-importcert \-alias abc \-file ABCCA\&.cer\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+ABCCA\&.cerファイルのデータを含む信頼できる証明書のエントリがキーストア内に作成され、該当するエントリに\fBabc\fRという別名が割り当てられます。
+.SS "CAからの証明書応答のインポート"
+.PP
+証明書署名リクエストの提出先のCAの公開鍵を認証する証明書をインポートした後は(または同種の証明書がすでにcacertsファイル内に存在している場合は)、証明応答をインポートし、自己署名証明書を証明書チェーンで置き換えることができます。このチェーンは、CAの応答がチェーンの場合に、リクエストに対するレスポンスとしてCAから送り返された証明書チェーンです。また、CAの応答が単一の証明書の場合は、この証明応答と、インポート先のキーストア内または\fBcacerts\fRキーストアファイル内にすでに存在する信頼できる証明書とを使用して構築した証明書チェーンです。
+.PP
+たとえば、証明書署名リクエストをVeriSignに送信する場合、送り返された証明書の名前がVSMarkJ\&.cerだとすると、次のようにして応答をインポートできます。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBkeytool \-importcert \-trustcacerts \-file VSMarkJ\&.cer\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.SS "公開鍵を認証する証明書のエクスポート"
+.PP
+\fBjarsigner\fRコマンドを使用してJava Archive (JAR)ファイルに署名する場合、このファイルを使用するクライアントは署名を認証する必要があります。クライアントが署名を認証する方法の1つに、まず自分の公開鍵の証明書を信頼できるエントリとしてクライアントのキーストアにインポートする方法があります。
+.PP
+そのためには、証明書をエクスポートして、クライアントに提供します。例として、次のコマンドを使用して、MJ\&.cerという名前のファイルに証明書をコピーできます。このコマンドでは、エントリに別名\fBmykey\fRがあると仮定しています。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBkeytool \-exportcert \-alias mykey \-file MJ\&.cer\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+証明書と署名付きJARファイルを入手したクライアントは、\fBjarsigner\fRコマンドを使用して署名を認証できます。
+.SS "キーストアのインポート"
+.PP
+コマンド\fBimportkeystore\fRを使用すれば、あるキーストアの全体を別のキーストア内にインポートできます。これは、鍵や証明書といったソースキーストア内のすべてのエントリが、単一のコマンドを使用してターゲットキーストア内にインポートされることを意味します。このコマンドを使用すれば、異なるタイプのキーストア内に含まれるエントリをインポートすることができます。インポート時には、ターゲット・キーストア内の新しいエントリはすべて、元と同じ別名および(秘密鍵や秘密鍵の場合は)保護用パスワードを持ちます。ソースキーストア内の非公開/秘密鍵をリカバリできない場合、\fBkeytool\fRコマンドはユーザーにパスワードの入力を求めます。このコマンドは、別名の重複を検出すると、ユーザーに新しい別名の入力を求めます。ユーザーは、新しい別名を指定することも、単純に既存の別名の上書きを\fBkeytool\fRコマンドに許可することもできます。
+.PP
+たとえば、通常のJKSタイプのキーストアkey\&.jks内のエントリをPKCS#11タイプのハードウェア・ベースのキーストア内にインポートするには、次のコマンドを使用します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBkeytool \-importkeystore\fR
+\fB \-srckeystore key\&.jks \-destkeystore NONE\fR
+\fB \-srcstoretype JKS \-deststoretype PKCS11\fR
+\fB \-srcstorepass \fR
+\fB \-deststorepass \fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+また、\fBimportkeystore\fRコマンドを使用すれば、あるソース・キーストア内の単一のエントリをターゲット・キーストアにインポートすることもできます。この場合は、前例のオプションに加えて、インポートする別名を指定する必要があります。\fB\-srcalias\fRオプションを指定する場合には、ターゲット別名もコマンド行から指定できるほか、秘密/秘密鍵の保護用パスワードやターゲット保護用パスワードも指定できます。その方法を示すコマンドを次に示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBkeytool \-importkeystore\fR
+\fB \-srckeystore key\&.jks \-destkeystore NONE\fR
+\fB \-srcstoretype JKS \-deststoretype PKCS11\fR
+\fB \-srcstorepass \fR
+\fB \-deststorepass \fR
+\fB \-srcalias myprivatekey \-destalias myoldprivatekey\fR
+\fB \-srckeypass \fR
+\fB \-destkeypass \fR
+\fB \-noprompt\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.SS "SSLサーバーの証明書の生成"
+.PP
+次に、3つのエンティティ、つまりルートCA(\fBroot\fR)、中間CA(\fBca\fR)およびSSLサーバー(\fBserver\fR)用の鍵ペアと証明書を生成する\fBkeytool\fRコマンドを示します。すべての証明書を同じキーストアに格納するようにしてください。これらの例では、RSAが推奨される鍵のアルゴリズムです。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBkeytool \-genkeypair \-keystore root\&.jks \-alias root \-ext bc:c\fR
+\fBkeytool \-genkeypair \-keystore ca\&.jks \-alias ca \-ext bc:c\fR
+\fBkeytool \-genkeypair \-keystore server\&.jks \-alias server\fR
+\fB \fR
+\fBkeytool \-keystore root\&.jks \-alias root \-exportcert \-rfc > root\&.pem\fR
+\fB \fR
+\fBkeytool \-storepass \-keystore ca\&.jks \-certreq \-alias ca |\fR
+\fB keytool \-storepass \-keystore root\&.jks\fR
+\fB \-gencert \-alias root \-ext BC=0 \-rfc > ca\&.pem\fR
+\fBkeytool \-keystore ca\&.jks \-importcert \-alias ca \-file ca\&.pem\fR
+\fB \fR
+\fBkeytool \-storepass \-keystore server\&.jks \-certreq \-alias server |\fR
+\fB keytool \-storepass \-keystore ca\&.jks \-gencert \-alias ca\fR
+\fB \-ext ku:c=dig,kE \-rfc > server\&.pem\fR
+\fBcat root\&.pem ca\&.pem server\&.pem |\fR
+\fB keytool \-keystore server\&.jks \-importcert \-alias server\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.SH "用語"
+.PP
+キーストア
+.RS 4
+キーストアは、暗号化の鍵と証明書を格納するための機能です。
+.RE
+.PP
+キーストアのエントリ
+.RS 4
+キーストアには異なるタイプのエントリを含めることができます。\fBkeytool\fRコマンドで最も適用範囲の広いエントリ・タイプは、次の2つです。
+.sp
+\fB鍵のエントリ\fR
+\- 各エントリは、非常に重要な暗号化の鍵の情報を保持します。この情報は、許可していないアクセスを防ぐために、保護された形で格納されます。一般に、この種のエントリとして格納される鍵は、秘密鍵か、対応する公開鍵の証明書チェーンを伴う秘密鍵です。証明書チェーンを参照してください。\fBkeytool\fRコマンドがこの両方のタイプのエントリを処理できるのに対し、\fBjarsigner\fRツールは後者のタイプのエントリ、つまり秘密鍵とそれに関連付けられた証明書チェーンのみを処理します。
+.sp
+\fB信頼できる証明書のエントリ\fR: 各エントリは、第三者からの公開鍵証明書を1つ含んでいます。このエントリは、信頼できる証明書と呼ばれます。それは、証明書内の公開鍵が、証明書のSubject(所有者)によって特定されるアイデンティティに由来するものであることを、キーストアの所有者が信頼するからです。証明書の発行者は、証明書に署名を付けることによって、その内容を保証します。
+.RE
+.PP
+キーストアの別名
+.RS 4
+キーストアのすべてのエントリ(鍵および信頼できる証明書エントリ)は、一意の別名を介してアクセスされます。
+.sp
+別名を指定するのは、\fB\-genseckey\fRコマンドを使用して秘密鍵を生成したり、\fB\-genkeypair\fRコマンドを使用して鍵ペア(公開鍵と秘密鍵)を生成したり、\fB\-importcert\fRコマンドを使用して証明書または証明書チェーンを信頼できる証明書のリストに追加するなど、特定のエンティティをキーストアに追加する場合です。これ以後、\fBkeytool\fRコマンドでエンティティを参照する場合は、このときに指定した別名を使用する必要があります。
+.sp
+たとえば、\fBduke\fRという別名を使用して新しい公開鍵と秘密鍵のペアを生成し、公開鍵を自己署名証明書でラップするとします。この場合は、次のコマンドを実行します。証明書チェーンを参照してください。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBkeytool \-genkeypair \-alias duke \-keypass dukekeypasswd\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+この例では、初期パスワードとして\fBdukekeypasswd\fRを指定しています。以後、別名\fBduke\fRに関連付けられた秘密鍵にアクセスするコマンドを実行するときは、このパスワードが必要になります。Dukeの秘密鍵のパスワードをあとから変更するには、次のコマンドを実行します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBkeytool \-keypasswd \-alias duke \-keypass dukekeypasswd \-new newpass\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+パスワードが、\fBdukekeypasswd\fRから\fBnewpass\fRに変更されます。テスト目的の場合、またはセキュアなシステムを使用している場合以外は、コマンド行やスクリプトでパスワードを指定しないでください。必要なパスワードのオプションをコマンド行で指定しなかった場合は、パスワードの入力を求められます。
+.RE
+.PP
+キーストアの実装
+.RS 4
+\fBjava\&.security\fRパッケージで提供されている\fBKeyStore\fRクラスは、キーストア内の情報へのアクセスおよび情報の変更を行うための、明確に定義されたインタフェースを提供します。キーストアの固定実装としては、それぞれが特定のタイプのキーストアを対象とする複数の異なる実装が存在可能です。
+.sp
+現在、\fBkeytool\fRと\fBjarsigner\fRの2つのコマンド行ツールと、Policy Toolという名前のGUIベースのツールが、キーストアの実装を使用しています。\fBKeyStore\fRクラスは\fBpublic\fRであるため、ユーザーはKeyStoreを使用した他のセキュリティ・アプリケーションも作成できます。
+.sp
+キーストアには、Oracleが提供する組込みのデフォルトの実装があります。これは、JKSという名前の独自のキーストア・タイプ(形式)を利用するもので、キーストアをファイルとして実装しています。この実装では、個々の秘密鍵は個別のパスワードによって保護され、キーストア全体の整合性も(秘密鍵とは別の)パスワードによって保護されます。
+.sp
+キーストアの実装は、プロバイダベースです。具体的には、\fBKeyStore\fRによって提供されるアプリケーション・インタフェースがサービス・プロバイダ・インタフェース(SPI)に基づいて実装されます。つまり、対応する\fBKeystoreSpi\fR抽象クラス(これも\fBjava\&.security\fRパッケージに含まれています)があり、このクラスが、プロバイダが実装する必要のあるService Provider Interfaceのメソッドを定義しています。ここで、\fIプロバイダ\fRとは、Java Security APIによってアクセス可能なサービスのサブセットに対し、その固定実装を提供するパッケージまたはパッケージの集合のことです。キーストアの実装を提供するには、http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/crypto/HowToImplAProvider\&.htmlにある
+Java暗号化アーキテクチャのプロバイダの実装方法で説明しているように、クライアントはプロバイダを実装し、\fBKeystoreSpi\fRサブクラスの実装を提供する必要があります。
+.sp
+アプリケーションでは、\fBKeyStore\fRクラスが提供する\fBgetInstance\fRファクトリ・メソッドを使用することで、様々なプロバイダから異なるタイプのキーストアの実装を選択できます。キーストアのタイプは、キーストア情報の格納形式とデータ形式を定義するとともに、キーストア内の非公開/秘密鍵とキーストアの整合性を保護するために使用されるアルゴリズムを定義します。異なるタイプのキーストアの実装には、互換性はありません。
+.sp
+\fBkeytool\fRコマンドは、任意のファイルベースのキーストア実装で動作します。コマンド行で渡されたキーストアの場所をファイル名として扱って、\fBFileInputStream\fRに変換し、ここからキーストア情報をロードします。\fBjarsigner\fRおよび\fBpolicytool\fRコマンドは、URLで指定できる任意の場所からキーストアを読み取ることができます。
+.sp
+\fBkeytool\fRと\fBjarsigner\fRの場合、\fB\-storetype\fRオプションを使用してコマンド行でキーストアのタイプを指定できます。Policy Toolの場合は、「キーストア」メニューによってキーストアのタイプを指定できます。
+.sp
+ユーザーがキーストアのタイプを明示的に指定しなかった場合、セキュリティ・プロパティ・ファイルで指定された\fBkeystore\&.type\fRプロパティの値に基づいて、ツールによってキーストアの実装が選択されます。このセキュリティ・プロパティ・ファイルは\fBjava\&.security\fRと呼ばれ、Windowsではセキュリティ・プロパティ・ディレクトリ\fBjava\&.home\elib\esecurity\fR、Oracle Solarisでは\fBjava\&.home/lib/security\fRにあります。\fBjava\&.home\fRは、実行時環境のディレクトリです。\fBjre\fRディレクトリは、SDKまたはJava Runtime Environment (JRE)の最上位のディレクトリにあります。
+.sp
+各ツールは、\fBkeystore\&.type\fRの値を取得し、この値で指定されたタイプのキーストアを実装しているプロバイダが見つかるまで、現在インストールされているすべてのプロバイダを調べます。そのプロバイダからのキーストアの実装を使用します。\fBKeyStore\fRクラスに定義されているstaticメソッド\fBgetDefaultType\fRを使用すると、アプリケーションやアプレットから\fBkeystore\&.type\fRプロパティの値を取得できます。次のコードは、デフォルトのキーストア・タイプ(\fBkeystore\&.type\fRプロパティで指定されたタイプ)のインスタンスを生成します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBKeyStore keyStore = KeyStore\&.getInstance(KeyStore\&.getDefaultType());\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+デフォルトのキーストア・タイプは\fBjks\fRで、これはOracleが提供する独自のタイプのキーストアの実装です。これは、セキュリティ・プロパティ・ファイル内の次の行によって指定されています。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBkeystore\&.type=jks\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+各ツールでデフォルト以外のキーストアの実装を使用するには、上の行を変更して別のキーストアのタイプを指定します。たとえば、\fBpkcs12\fRと呼ばれるキーストアのタイプのキーストアの実装を提供するプロバイダ・パッケージがある場合、行を次のように変更します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBkeystore\&.type=pkcs12\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+\fB注意:\fR
+キーストアのタイプの指定では、大文字と小文字は区別されません。たとえば、JKSとjksは同じものとして扱われます。
+.RE
+.PP
+証明書
+.RS 4
+証明書(公開鍵証明書)とは、あるエンティティ(発行者)からのデジタル署名付きの文書のことです。証明書には、他のあるエンティティ(署名者)の公開鍵(およびその他の情報)が特別な値を持っていることが書かれています。次の用語は、証明書に関連しています。
+.sp
+\fB公開鍵\fR: 公開鍵は、特定のエンティティに関連付けられた数です。公開鍵は、該当するエンティティとの間に信頼できる関係を持つ必要があるすべての人に対して公開することを意図したものです。公開鍵は、署名を検証するのに使用されます。
+.sp
+\fBデジタル署名\fR: データがデジタル署名されると、そのデータは、エンティティのアイデンティティと、そのエンティティがデータの内容について知っていることを証明書する署名とともに格納されます。エンティティの秘密鍵を使用してデータに署名を付けると、データの偽造は不可能になります。
+.sp
+\fBアイデンティティ\fR: エンティティをアドレス指定する既知の方法。システムによっては、公開鍵をアイデンティティにするものがあります。公開鍵の他にも、Oracle Solaris UIDや電子メール・アドレス、X\&.509識別名など、様々なものをアイデンティティとすることができます。
+.sp
+\fB署名\fR: 署名は、なんらかのデータを基にエンティティの秘密鍵を使用して計算されます。署名者、証明書の場合は発行者とも呼ばれます。
+.sp
+\fB秘密鍵\fR: 秘密鍵は特定のエンティティのみが知っている数のことで、この数のことを、そのエンティティの秘密鍵といいます。秘密鍵は、他に知られないように秘密にしておくことが前提になっています。秘密鍵と公開鍵は、すべての公開鍵暗号化システムで対になって存在しています。DSAなどの典型的な公開鍵暗号化システムの場合、1つの秘密鍵は正確に1つの公開鍵に対応します。秘密鍵は、署名を計算するのに使用されます。
+.sp
+\fBエンティティ\fR: エンティティは、人、組織、プログラム、コンピュータ、企業、銀行など、一定の度合いで信頼の対象となる様々なものを指します。
+.sp
+公開鍵暗号化では、ユーザーの公開鍵にアクセスする必要があります。大規模なネットワーク環境では、互いに通信しているエンティティ間で以前の関係が引続き確立されていると仮定したり、使用されているすべての公開鍵を収めた信頼できるリポジトリが存在すると仮定したりすることは不可能です。このような公開鍵の配布に関する問題を解決するために証明書が考案されました。現在では、認証局(CA)が信頼できる第三者として機能します。CAは、他のエンティティの証明書に署名する(発行する)行為を、信頼して任されているエンティティ(企業など)です。CAは法律上の契約に拘束されるので、有効かつ信頼できる証明書のみを作成するものとして扱われます。VeriSign、Thawte、Entrustをはじめ、多くの公的な認証局が存在します。
+.sp
+Microsoftの認証サーバー、EntrustのCA製品などを所属組織内で利用すれば、独自の認証局を運営することも可能です。\fBkeytool\fRコマンドを使用すると、証明書の表示、インポートおよびエクスポートを行うことができます。また、自己署名証明書を生成することもできます。
+.sp
+現在、\fBkeytool\fRコマンドはX\&.509証明書を対象にしています。
+.RE
+.PP
+X\&.509証明書
+.RS 4
+X\&.509規格では、証明書に含める情報が定義されており、この情報を証明書に書き込む方法(データ形式)についても記述されています。証明書のすべてのデータは、ASN\&.1/DERと呼ばれる2つの関連規格を使用して符号化されます。Abstract Syntax Notation 1はデータについて記述しています。Definite Encoding Rulesは、データの保存および転送の方法について記述しています。
+.sp
+すべてのX\&.509証明書は、署名の他に次のデータを含んでいます。
+.sp
+\fBバージョン\fR: 証明書に適用されるX\&.509規格のバージョンを特定します。証明書に指定できる情報は、バージョンによって異なります。今のところ、3つのバージョンが定義されています。\fBkeytool\fRコマンドでは、v1、v2、v3の証明書をインポートおよびエクスポートできます。v3の証明書を生成します。
+.sp
+X\&.509 Version 1は、1988年から利用されて広く普及しており、最も一般的です。
+.sp
+X\&.509 Version 2では、Subjectや発行者の名前をあとで再利用できるようにするために、Subjectと発行者の一意識別子の概念が導入されました。ほとんどの証明書プロファイル文書では、名前を再使用しないことと、証明書で一意の識別子を使用しないことが、強く推奨されています。Version 2の証明書は、広くは使用されていません。
+.sp
+X\&.509 Version 3は最も新しい(1996年)規格で、エクステンションの概念をサポートしています。エクステンションは誰でも定義することができ、証明書に含めることができます。一般的なエクステンションとしては、KeyUsage(\fB署名専用\fRなど、鍵の使用を特定の目的に制限する)、AlternativeNames(DNS名、電子メール・アドレス、IPアドレスなど、他のアイデンティティを公開鍵に関連付けることができる)などがあります。エクステンションには、criticalというマークを付けて、そのエクステンションのチェックと使用を義務づけることができます。たとえば、criticalとマークされ、\fBkeyCertSign\fRが設定されたKeyUsageエクステンションが証明書に含まれている場合、この証明書をSSL通信中に提示すると、証明書が拒否されます。これは、証明書のエクステンションによって、関連する秘密鍵が証明書の署名専用として指定されており、SSLでは使用できないためです。
+.sp
+\fBシリアル番号\fR: 証明書を作成したエンティティは、そのエンティティが発行する他の証明書と区別するために、証明書にシリアル番号を割り当てます。この情報は、様々な方法で使用されます。たとえば、証明書が取り消されると、シリアル番号が証明書失効リスト(CRL)に格納されます。
+.sp
+\fB証明書アルゴリズム識別子\fR: 証明書に署名を付けるときにCAが使用したアルゴリズムを特定します。
+.sp
+\fB発行者名\fR: 証明書に署名を付けたエンティティのX\&.500識別名です。X\&.500識別名を参照してください。通常はCAです。この証明書を使用することは、証明書に署名を付けたエンティティを信頼することを意味します。ルートつまりトップレベルのCAの証明書など、場合によっては発行者が自身の証明書に署名を付けることがあります。
+.sp
+\fB有効期間\fR: 各証明書は限られた期間のみ有効です。この期間は開始の日時と終了の日時によって指定され、数秒の短い期間から100年という長期にわたることもあります。選択される有効期間は、証明書への署名に使用される秘密鍵の強度や証明書に支払う金額など、様々な要因で異なります。有効期間は、関連する秘密鍵が損われない場合に、エンティティが公開鍵を信頼できると期待される期間です。
+.sp
+\fB主体名\fR: 証明書で公開鍵を認証するエンティティの名前。この名前はX\&.500標準を使用するので、インターネット全体で一意なものと想定されます。これは、エンティティのX\&.500識別名(DN)です。X\&.500識別名を参照してください。次に例を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBCN=Java Duke, OU=Java Software Division, O=Oracle Corporation, C=US\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+これらはそれぞれ主体の通称(CN)、組織単位(OU)、組織(O)、国(C)を表します。
+.sp
+\fB主体の公開鍵情報\fR: 名前を付けられたエンティティの公開鍵とアルゴリズム識別子です。アルゴリズム識別子では、公開鍵に対して使用されている公開鍵暗号化システムおよび関連する鍵パラメータが指定されています。
+.RE
+.PP
+証明書チェーン
+.RS 4
+\fBkeytool\fRコマンドでは、秘密鍵および関連する証明書チェーンを含むキーストアの鍵エントリを作成し、管理することができます。このようなエントリでは、秘密鍵に対応する公開鍵は、チェーンの最初の証明書に含まれています。
+.sp
+鍵を初めて作成すると、自己署名証明書という1つの要素のみを含むチェーンが開始されます。コマンドの\fB\-genkeypair\fRを参照してください。自己署名証明書は発行者(署名者)が主体と同じです。主体は、その公開鍵が証明書によって認証されるエンティティです。\fB\-genkeypair\fRコマンドを呼び出して新しい公開鍵と秘密鍵のペアを作成すると、公開鍵は常に自己署名証明書でラップされます。
+.sp
+この後、証明書署名リクエスト(CSR)が\fB\-certreq\fRコマンドで生成されて、CSRが認証局(CA)に送信されると、CAからのレスポンスが\fB\-importcert\fRでインポートされ、元の自己署名証明書は証明書チェーンによって置き換えられます。\fBの\fR\-certreq\fBおよび\fR\-importcertコマンドオプションを参照してください。チェーンの最後にあるのは、Subjectの公開鍵を認証したCAが発行した証明書(応答)です。チェーン内のその前の証明書は、CAの公開鍵を認証する証明書です。
+.sp
+CAの公開鍵を認証する証明書は、多くの場合、自己署名証明書(つまりCAが自身の公開鍵を認証した証明書)であり、これはチェーンの最初の証明書になります。場合によっては、CAが証明書のチェーンを返すこともあります。この場合、チェーン内の最後の証明書(CAによって署名され、鍵エントリの公開鍵を認証する証明書)に変わりはありませんが、チェーン内のその前の証明書は、CSRの送信先のCAとは別のCAによって署名され、CSRの送信先のCAの公開鍵を認証する証明書になります。チェーン内のその前の証明書は、次のCAの鍵を認証する証明書になります。以下同様に、自己署名された「ルート」証明書に達するまでチェーンが続きます。したがって、チェーン内の(最初の証明書以後の)各証明書では、チェーン内の次の証明書の署名者の公開鍵が認証されていることになります。
+.sp
+多くのCAは、チェーンをサポートせずに発行済の証明書のみを返します。特に、中間のCAが存在しないフラットな階層構造の場合は、その傾向が顕著です。このような場合は、キーストアにすでに格納されている信頼できる証明書情報から、証明書チェーンを確立する必要があります。
+.sp
+別の応答形式(PKCS#7で定義されている形式)では、発行済証明書に加え、証明書チェーンのサポートが含まれています。\fBkeytool\fRコマンドでは、どちらの応答形式も扱うことができます。
+.sp
+トップレベル(ルート)CAの証明書は、自己署名証明書です。ただし、ルートの公開鍵への信頼は、ルート証明書自体からではなく、新聞など他のソースから取得されます。これは、VeriSignルートCAなどの識別名を使用して、誰でも自己署名型証明書を生成できるためです。ルートCAの公開鍵は広く知られています。ルートCAの公開鍵を証明書に格納する理由は、証明書という形式にすることで多くのツールから利用できるようになるからにすぎません。つまり、証明書は、ルートCAの公開鍵を運ぶ「媒体」として利用されるのみです。ルートCAの証明書をキーストアに追加するときは、\fB\-printcert\fRオプションを使用して、その前に証明書の内容を表示し、表示されたフィンガープリントと、新聞やルートCAのWebページなどから入手した既知のフィンガープリントとを比較する必要があります。
+.RE
+.PP
+cacerts証明書ファイル
+.RS 4
+\fBcacerts\fRという名前の証明書ファイルは、Windowsではセキュリティ・プロパティ・ディレクトリ\fBjava\&.home\elib\esecurity\fR、Oracle Solarisでは\fBjava\&.home/lib/security\fRに置かれています。\fBjava\&.home\fRは、実行環境のディレクトリ(SDKの\fBjre\fRディレクトリまたはJREの最上位ディレクトリ)です。
+.sp
+\fBcacerts\fRファイルは、CAの証明書を含む、システム全体のキーストアです。システム管理者は、キーストア・タイプに\fBjks\fRを指定することで、\fBkeytool\fRコマンドを使用してこのファイルの構成と管理を行うことができます。\fBcacerts\fRキーストア・ファイルは、ルートCA証明書のデフォルト・セットを含んだ状態で出荷されています。デフォルトの証明書を一覧表示するには、次のコマンドを使用します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBkeytool \-list \-keystore java\&.home/lib/security/cacerts\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+\fBcacerts\fRキーストア・ファイルの初期パスワードは、\fBchangeit\fRです。システム管理者は、SDKのインストール後、このファイルのパスワードとデフォルト・アクセス権を変更する必要があります。
+.sp
+\fB注意:\fR
+\fBcacerts\fRファイルを確認することが重要です。\fBcacerts\fRファイル内のCAは、署名および他のエンティティへの証明書発行のためのエンティティとして信頼されるため、\fBcacerts\fRファイルの管理は慎重に行う必要があります。\fBcacerts\fRファイルには、信頼するCAの証明書のみが含まれている必要があります。ユーザーは、自身の責任において、\fBcacerts\fRファイルにバンドルされている信頼できるルートCA証明書を検証し、信頼性に関する独自の決定を行います。
+.sp
+信頼できないCA証明書を\fBcacerts\fRファイルから削除するには、\fBkeytool\fRコマンドの\fBdelete\fRオプションを使用します。\fBcacerts\fRファイルはJREのインストール・ディレクトリにあります。このファイルを編集するアクセス権がない場合は、システム管理者に連絡してください
+.RE
+.PP
+インターネットRFC 1421証明書符号化規格
+.RS 4
+多くの場合、証明書は、バイナリ符号化ではなく、インターネットRFC 1421規格で定義されている出力可能符号化方式を使用して格納されます。Base 64符号化とも呼ばれるこの証明書形式では、電子メールやその他の機構を通じて、他のアプリケーションに証明書を容易にエクスポートできます。
+.sp
+\fB\-importcert\fRと\fB\-printcert\fRコマンドでは、この形式の証明書とバイナリ符号化の証明書を読み込むことができます。\fB\-exportcert\fRコマンドでは、デフォルトでバイナリ符号化の証明書が出力されます。ただし、\fB\-rfc\fRオプションを指定した場合は、出力可能符号化方式の証明書が出力されます。
+.sp
+\fB\-list\fRコマンドでは、デフォルトで証明書のSHA1フィンガープリントが出力されます。\fB\-v\fRオプションが指定されている場合、証明書は人が理解できる形式で出力されます。\fB\-rfc\fRオプションが指定されている場合、証明書は出力可能符号化方式で出力されます。
+.sp
+出力可能符号化方式で符号化された証明書は、次のテキストで始まり、次のテキストで終了します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-\-\-\-\-BEGIN CERTIFICATE\-\-\-\-\-\fR
+
+\fBencoded certificate goes here\&. \fR
+
+\fB\-\-\-\-\-END CERTIFICATE\-\-\-\-\-\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+X\&.500識別名
+.RS 4
+X\&.500識別名は、エンティティを特定するために使用されます。たとえば、X\&.509証明書の\fBsubject\fRフィールドと\fBissuer\fR(署名者)フィールドで指定される名前は、X\&.500識別名です。\fBkeytool\fRコマンドは、次のサブパートをサポートしています。
+.sp
+\fBcommonName\fR: Susan Jonesなど、人の通称。
+.sp
+\fBorganizationUnit\fR: 小さな組織(部、課など)の名称。Purchasingなどです。
+.sp
+\fBlocalityName\fR: 地域(都市)名。Palo Altoなど。
+.sp
+\fBstateName\fR: 州名または地方名。Californiaなど。
+.sp
+\fBcountry\fR: 2文字の国コード。CHなど。
+.sp
+識別名文字列を\fB\-dname\fRオプションの値として指定する場合(たとえば\fB\-genkeypair\fRコマンドに)、文字列は次の形式にする必要があります。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBCN=cName, OU=orgUnit, O=org, L=city, S=state, C=countryCode\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+イタリックの項目は、実際に指定する値を表します。短縮形のキーワードの意味は、次のとおりです。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBCN=commonName\fR
+\fBOU=organizationUnit\fR
+\fBO=organizationName\fR
+\fBL=localityName\fR
+\fBS=stateName\fR
+\fBC=country\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+次に示すのは、識別名文字列の例です。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBCN=Mark Smith, OU=Java, O=Oracle, L=Cupertino, S=California, C=US\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+この文字列を使用したコマンドの例です。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBkeytool \-genkeypair \-dname "CN=Mark Smith, OU=Java, O=Oracle, L=Cupertino,\fR
+\fBS=California, C=US" \-alias mark\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+キーワードの短縮形では、大文字と小文字は区別されません。たとえば、CN、cnおよびCnは、どれも同じものとして扱われます。
+.sp
+一方、キーワードの指定順序には意味があり、各サブコンポーネントは上に示した順序で指定する必要があります。ただし、サブコンポーネントをすべて指定する必要はありません。たとえば、次のように一部のサブコンポーネントのみを指定できます。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBCN=Steve Meier, OU=Java, O=Oracle, C=US\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+識別名文字列の値にカンマが含まれる場合に、コマンド行で文字列を指定するときには、次のようにカンマをバックスラッシュ文字(\e)でエスケープする必要があります。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBcn=Peter Schuster, ou=Java\e, Product Development, o=Oracle, c=US\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+識別名文字列をコマンド行で指定する必要はありません。識別名を必要とするコマンドを実行するときに、コマンド行で識別名を指定しなかった場合は、各サブコンポーネントの入力を求められます。この場合は、カンマをバックスラッシュ(\e)でエスケープする必要はありません。
+.RE
+.SH "警告"
+.SS "信頼できる証明書のインポート警告"
+.PP
+\fB重要\fR: 信頼できる証明書として証明書をインポートする前に、証明書の内容を慎重に調べてください。
+.PP
+Windowsの例:
+.PP
+まず、\fB\-noprompt\fRオプションを指定せずに\fB\-printcert\fRコマンドまたは\fB\-importcert\fRコマンドを使用して、証明書を表示します。表示された証明書のフィンガープリントが、期待されるフィンガープリントと一致することを確認します。たとえば、証明書が送られてきて、この証明書を\fB\etmp\ecert\fRという名前でファイルに格納しているとします。この場合は、信頼できる証明書のリストにこの証明書を追加する前に、\fB\-printcert\fRコマンドを実行してフィンガープリントを表示できます。たとえば、次のようにします。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB keytool \-printcert \-file \etmp\ecert\fR
+\fB Owner: CN=ll, OU=ll, O=ll, L=ll, S=ll, C=ll\fR
+\fB Issuer: CN=ll, OU=ll, O=ll, L=ll, S=ll, C=ll\fR
+\fB Serial Number: 59092b34\fR
+\fB Valid from: Thu Sep 25 18:01:13 PDT 1997 until: Wed Dec 24 17:01:13 PST 1997\fR
+\fB Certificate Fingerprints:\fR
+\fB MD5: 11:81:AD:92:C8:E5:0E:A2:01:2E:D4:7A:D7:5F:07:6F\fR
+\fB SHA1: 20:B6:17:FA:EF:E5:55:8A:D0:71:1F:E8:D6:9D:C0:37:13:0E:5E:FE\fR
+\fB SHA256: 90:7B:70:0A:EA:DC:16:79:92:99:41:FF:8A:FE:EB:90:\fR
+\fB 17:75:E0:90:B2:24:4D:3A:2A:16:A6:E4:11:0F:67:A4\fR
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Oracle Solarisの例:
+.PP
+まず、\fB\-noprompt\fRオプションを指定せずに\fB\-printcert\fRコマンドまたは\fB\-importcert\fRコマンドを使用して、証明書を表示します。表示された証明書のフィンガープリントが、期待されるフィンガープリントと一致することを確認します。たとえば、あるユーザーから証明書が送られてきて、この証明書を\fB/tmp/cert\fRという名前でファイルに格納しているとします。この場合は、信頼できる証明書のリストにこの証明書を追加する前に、\fB\-printcert\fRコマンドを実行してフィンガープリントを表示できます。たとえば、次のようにします。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB keytool \-printcert \-file /tmp/cert\fR
+\fB Owner: CN=ll, OU=ll, O=ll, L=ll, S=ll, C=ll\fR
+\fB Issuer: CN=ll, OU=ll, O=ll, L=ll, S=ll, C=ll\fR
+\fB Serial Number: 59092b34\fR
+\fB Valid from: Thu Sep 25 18:01:13 PDT 1997 until: Wed Dec 24 17:01:13 PST 1997\fR
+\fB Certificate Fingerprints:\fR
+\fB MD5: 11:81:AD:92:C8:E5:0E:A2:01:2E:D4:7A:D7:5F:07:6F\fR
+\fB SHA1: 20:B6:17:FA:EF:E5:55:8A:D0:71:1F:E8:D6:9D:C0:37:13:0E:5E:FE\fR
+\fB SHA256: 90:7B:70:0A:EA:DC:16:79:92:99:41:FF:8A:FE:EB:90:\fR
+\fB 17:75:E0:90:B2:24:4D:3A:2A:16:A6:E4:11:0F:67:A4\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+次に、証明書を送信した人物に連絡し、この人物が提示したフィンガープリントと、上のコマンドで表示されたフィンガープリントとを比較します。フィンガープリントが一致すれば、送信途中で他の何者か(攻撃者など)による証明書のすり替えが行われていないことを確認できます。送信途中でこの種の攻撃が行われていた場合、チェックを行わずに証明書をインポートすると、攻撃者によって署名されたすべてのもの(攻撃的意図を持つクラス・ファイルを含んだJARファイルなど)を信頼することになります。
+.PP
+\fB注意:\fR
+証明書をインポートする前に\fB\-printcert\fRコマンドを実行する必要はありません。キーストア内の信頼できる証明書のリストに証明書を追加する前に、\fB\-importcert\fRコマンドによって証明書の情報が表示され、確認を求めるメッセージが表示されるためです。ユーザーはインポート操作を停止できます。ただし、これを実行できるのは、\fB\-noprompt\fRオプションを指定せずに\fB\-importcert\fRコマンドを呼び出す場合のみです。\fB\-noprompt\fRオプションが指定されている場合、ユーザーとの対話は行われません。
+.SS "パスワード警告"
+.PP
+キーストアに対する操作を行うほとんどのコマンドでは、ストアのパスワードが必要です。また、一部のコマンドでは、非公開/秘密鍵のパスワードが必要になることがあります。パスワードはコマンド行で指定できます(\fB\-storepass\fRオプションと\fB\-keypass\fRオプションを使用)。ただし、テスト目的の場合、またはセキュアなシステムを使用している場合以外は、コマンド行やスクリプトでパスワードを指定しないでください。必要なパスワードのオプションをコマンド行で指定しなかった場合は、パスワードの入力を求められます。
+.SS "証明書の準拠に関する警告"
+.PP
+インターネット標準RFC 5280では、X\&.509証明書の準拠に関するプロファイルが定義されており、証明書のフィールドおよびエクステンションに有効な値および値の組合せが記載されています。標準については、
+http://tools\&.ietf\&.org/rfc/rfc5280\&.txtを参照してください
+.PP
+\fBkeytool\fRコマンドでは、これらのルールすべてが適用されるわけではないため、標準に準拠しない証明書を生成できます。標準に準拠しない証明書は、JREや他のアプリケーションで拒否されることがあります。ユーザーは、\fB\-dname\fRや\fB\-ext\fRなどで適正なオプションを指定するようにしてください。
+.SH "注意"
+.SS "新しい信頼できる証明書のインポート"
+.PP
+\fBkeytool\fRコマンドは、キーストアに証明書を追加する前に、キーストア内にすでに存在する信頼できる証明書を使用して、インポートする証明書から(ルートCAの)自己署名証明書に至るまでの信頼のチェーンの構築を試みます。
+.PP
+\fB\-trustcacerts\fRオプションを指定した場合、追加の証明書は信頼できるすなわち\fBcacerts\fRという名前のファイルに含まれる証明書のチェーンとみなされます。
+.PP
+\fBkeytool\fRコマンドが、インポートする証明書から自己署名証明書(キーストアまたは\fBcacerts\fRファイルに含まれている自己署名証明書)に至るまでの信頼のパスの構築に失敗した場合は、インポートする証明書の情報を表示し、ユーザーに確認を求めます。この場合は、表示された証明書のフィンガープリントと、他のなんらかの(信頼できる)情報源(証明書の所有者など)から入手したフィンガープリントとを比較します。信頼できる証明書として証明書をインポートするときは、証明書が有効であることを慎重に確認する必要があります。信頼できる証明書のインポート警告を参照してください。インポート操作は、証明書を確認する時点で中止できます。\fB\-noprompt\fRオプションが指定されている場合、ユーザーとの対話は行われません。
+.SS "証明書応答のインポート"
+.PP
+証明書応答をインポートするときは、キーストア内の信頼できる証明書、および(\fB\-trustcacert\fR\fBs\fRオプションが指定されている場合は)\fBcacerts\fRキーストア・ファイルで構成された証明書を使用して証明書応答が検査されます。cacerts証明書ファイルを参照してください。
+.PP
+証明書応答が信頼できるかどうかを決定する方法は次のとおりです。
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+証明書応答が単一のX\&.509証明書である場合、\fBkeytool\fRコマンドは、証明書応答から(ルートCAの)自己署名証明書に至るまでの信頼チェーンの確立を試みます。証明書応答と、証明書応答の認証に使用される証明書の階層構造は、aliasの新しい証明書チェーンを形成します。信頼チェーンが確立されない場合、証明書応答はインポートされません。この場合、\fBkeytool\fRコマンドは証明書を出力せず、ユーザーに検証を求めるプロンプトを表示します。ユーザーが証明書応答の信頼性を判断するのは非常に難しいためです。
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+証明書応答がPKCS#7形式の証明書チェーンまたは一連のX\&.509証明書である場合、チェーンは、ユーザーの証明書が最初に、0以上のCA証明書がその次にくるように並べられます。チェーンが自己署名のルートCA証明書で終わり、\fB \-trustcacerts\fRオプションが指定されている場合、\fBkeytool\fRコマンドは、その証明書と、キーストア内または\fBcacerts\fRキーストア・ファイル内の信頼できるすべての証明書を照合しようとします。チェーンが自己署名のルートCA証明書で終わっておらず、\fB\-trustcacerts\fRオプションが指定されている場合、\fBkeytool\fRコマンドは、キーストア内または\fBcacerts\fRキーストア・ファイル内の信頼できる証明書から自己署名のルートCA証明書を見つけてそれをチェーンの末尾に追加しようとします。その証明書が見つからず、\fB\-noprompt\fRオプションが指定されていない場合は、チェーン内の最後の証明書の情報が出力され、ユーザーは確認を求められます。
+.RE
+.PP
+証明書応答内の公開鍵が\fBalias\fRですでに格納されているユーザーの公開鍵に一致した場合、古い証明書チェーンが応答内の新しい証明書チェーンで置き換えられます。以前の証明書チェーンを有効な\fBkeypass\fRで置き換えることができるのは、エントリの秘密鍵を保護するためのパスワードを指定した場合のみです。パスワードを指定しておらず、秘密鍵のパスワードがキーストアのパスワードと異なる場合は、秘密鍵のパスワードの入力を求められます。
+.PP
+このコマンドは、以前のリリースでは\fB\-import\fRという名前でした。このリリースでは、引き続き古い名前がサポートされています。今後は、新しい名前\fB\-importcert\fRが優先されます。
+.SH "関連項目"
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+jar(1)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+jarsigner(1)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+http://docs\&.oracle\&.com/javase/tutorial/security/index\&.htmlにある
+「コース: Java SEのセキュリティ機能」
+.RE
+.br
+'pl 8.5i
+'bp
diff --git a/FCL/src/main/assets/java/man/ja_JP.UTF-8/man1/orbd.1 b/FCL/src/main/assets/java/man/ja_JP.UTF-8/man1/orbd.1
new file mode 100644
index 000000000..a4e9d3651
--- /dev/null
+++ b/FCL/src/main/assets/java/man/ja_JP.UTF-8/man1/orbd.1
@@ -0,0 +1,285 @@
+'\" t
+.\" Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved.
+.\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+.\"
+.\" This code is free software; you can redistribute it and/or modify it
+.\" under the terms of the GNU General Public License version 2 only, as
+.\" published by the Free Software Foundation.
+.\"
+.\" This code 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
+.\" version 2 for more details (a copy is included in the LICENSE file that
+.\" accompanied this code).
+.\"
+.\" You should have received a copy of the GNU General Public License version
+.\" 2 along with this work; if not, write to the Free Software Foundation,
+.\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+.\"
+.\" Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+.\" or visit www.oracle.com if you need additional information or have any
+.\" questions.
+.\"
+.\" Title: orbd
+.\" Language: Japanese
+.\" Date: 2013年11月21日
+.\" SectDesc: Java IDLおよびRMI-IIOPツール
+.\" Software: JDK 8
+.\" Arch: 汎用
+.\" Part Number: E58103-01
+.\" Doc ID: JSSON
+.\"
+.if n .pl 99999
+.TH "orbd" "1" "2013年11月21日" "JDK 8" "Java IDLおよびRMI-IIOPツール"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名前"
+orbd \- CORBA環境のサーバーにある永続オブジェクトをクライアントから検索して呼び出せるようにします。
+.SH "概要"
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBorbd\fR [ \fIoptions\fR ]
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+\fIoptions\fR
+.RS 4
+コマンド行オプション。オプションを参照してください。
+.RE
+.SH "説明"
+.PP
+\fBorbd\fRコマンドを使用すると、CORBA環境のサーバーにある永続オブジェクトをクライアントから透過的に検索して呼び出すことができます。orbdツールに含まれるサーバー・マネージャを使用すると、クライアントはCORBA環境でサーバー上にある永続オブジェクトを透過的に検索して呼び出すことができます。永続サーバーは、ネーミング・サービスに永続オブジェクト参照を発行する際、サーバーのポート番号のかわりにORBDのポート番号をオブジェクト参照に含めます。永続オブジェクト参照のオブジェクト参照にORBDポート番号を含めることには、次のような利点があります。
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+ネーミング・サービスにあるオブジェクト参照が、サーバーのライフ・サイクルと無関係になります。たとえば、オブジェクト参照は、初めてインストールされたときはネーミング・サービスのサーバーによってネーミング・サービスに発行されますが、その後は、サーバーの開始またはシャットダウンの回数にかかわらず、呼び出したクライアントにORBDが正しいオブジェクト参照を返します。
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+クライアントは一度のみネーミング・サービスのオブジェクト参照をルックアップする必要がありますが、その後はサーバーのライフ・サイクルによる変更とは無関係にこの参照を利用することができます。
+.RE
+.PP
+ORBDのサーバー・マネージャにアクセスするには、\fBservertool\fRを使用してサーバーを起動する必要があります。servertoolは、アプリケーション・プログラマが、永続サーバーの登録、登録解除、起動および停止を行うためのコマンド行インタフェースです。サーバー・マネージャの詳細は、サーバー・マネージャを参照してください。
+.PP
+\fBorbd\fRを起動すると、ネーミング・サービスも起動されます。ネーミング・サービスの詳細。ネーミング・サービスの起動と停止を参照してください。
+.SH "オプション"
+.PP
+\-ORBInitialPort \fInameserverport\fR
+.RS 4
+必須。ネーム・サーバーを起動するポートの番号を指定します。\fBorbd\fRは、起動されると、このポート上で着信リクエストをリスニングします。Oracle Solarisソフトウェアでは、1024より小さいポートでプロセスを開始する場合、rootユーザーになる必要があります。このため、1024以上のポート番号を使用することをお薦めします。
+.RE
+.SS "必須でないオプション"
+.PP
+\-port \fIport\fR
+.RS 4
+ORBDを起動するポートを指定します。このポートで、永続オブジェクトに対するリクエストをORBDが受け取ります。このポートのデフォルト値は1049です。このポート番号は、永続Interoperable Object References (IOR)のポート・フィールドに追加されます。
+.RE
+.PP
+\-defaultdb \fIdirectory\fR
+.RS 4
+ORBD永続格納ディレクトリ\fBorb\&.db\fRが作成されるベース・ディレクトリを指定します。このオプションが指定されていない場合、デフォルト値は\fB\&./orb\&.db\fRになります。
+.RE
+.PP
+\-serverPollingTime \fImilliseconds\fR
+.RS 4
+\fBservertool\fRを使用して登録された永続サーバーが正常に動作していることをORBDが確認する間隔を指定します。デフォルト値は1000ミリ秒です。\fBmilliseconds\fRに指定する値は、有効な正の整数にする必要があります。
+.RE
+.PP
+\-serverStartupDelay milliseconds
+.RS 4
+\fBservertool\fRを使用して登録された永続サーバーを再起動してから、位置転送の例外を送信するまでのORBDの待機時間を指定します。デフォルト値は1000ミリ秒です。\fBmilliseconds\fRに指定する値は、有効な正の整数にする必要があります。
+.RE
+.PP
+\-J\fIoption\fR
+.RS 4
+Java Virtual Machineに\fBoption\fRを渡します。\fBoption\fRには、Javaアプリケーション起動ツールのリファレンス・ページに記載されているオプションを1つ指定します。たとえば、\fB\-J\-Xms48m\fRと指定すると、スタートアップ・メモリーは48MBに設定されます。java(1)を参照してください。
+.RE
+.SS "ネーミング・サービスの起動と停止"
+.PP
+ネーミング・サービスは、CORBAオブジェクトにネーミングを可能にするCORBAサービスです。ネーミングは名前をオブジェクト参照にバインドすることにより可能になります。ネーム・バインディングをネーミング・サービスに格納すれば、クライアントが名前を指定して目的のオブジェクト参照を取得できるようになります。
+.PP
+クライアントまたはサーバーを実行する前に、ORBDを起動します。ORBDには、永続ネーミング・サービスおよび一時ネーミング・サービスが組み込まれています。これらはどちらもCOSネーミング・サービスの実装です。
+.PP
+永続ネーミング・サービスは、ネーミング・コンテキストに対して永続性を提供します。つまり、この情報は、サービスの停止や起動後にも維持され、サービスに障害が発生した場合でも回復できます。ORBDを再起動すると、永続ネーミング・サービスはネーミング・コンテキストのグラフを復元し、すべてのクライアントとサーバーの名前のバインディングがそのまま(永続的に)保持されるようにします。
+.PP
+後方互換性のため、旧リリースのJDKに同梱されていた一時ネーミング・サービス\fBtnameserv\fRが、今回のリリースのJava SEにも同梱されています。一時ネーム・サービスでは、ネーム・サービスの実行中にのみネーミング・コンテキストが保持されます。サービスが中断されると、ネーミング・コンテキスト・グラフは失われます。
+.PP
+\fB\-ORBInitialPort\fR引数は、\fBorbd\fRの必須のコマンド行引数で、ネーミング・サービスが実行されるポートの番号を設定するために使用されます。次の手順では、Java IDL Object Request Broker Daemon用にポート1050を使用できることを前提としています。Oracle Solarisソフトウェアを使用する場合、1024より小さいポートでプロセスを開始するには、rootユーザーになる必要があります。このため、1024以上のポート番号を使用することをお薦めします。必要であれば別のポートに変更してください。
+.PP
+Solaris、LinuxまたはOS Xコマンド・シェルから\fBorbd\fRを開始するには、次のように入力します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBorbd \-ORBInitialPort 1050&\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+WindowsのMS\-DOSシステム・プロンプトでは、次のように入力します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBstart orbd \-ORBInitialPort 1050\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+これでORBDが実行され、サーバーとクライアントのアプリケーションを実行できるようになります。クライアントとサーバーのアプリケーションは、実行時に、ネーミング・サービスが実行されているポートの番号(必要な場合はさらにマシン名)を認識している必要があります。これを実現する1つの方法は、次のコードをアプリケーションに追加することです。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBProperties props = new Properties();\fR
+\fBprops\&.put("org\&.omg\&.CORBA\&.ORBInitialPort", "1050");\fR
+\fBprops\&.put("org\&.omg\&.CORBA\&.ORBInitialHost", "MyHost");\fR
+\fBORB orb = ORB\&.init(args, props);\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+この例では、ネーミング・サービスは、ホスト\fBMyHost\fRのポート1050上で実行されます。別の方法として、コマンド行からサーバーまたはクライアントのアプリケーションを実行するときに、ポート番号またはマシン名あるいはその両方を指定する方法もあります。たとえば、次のコマンド行オプションを使用して、\fBHelloApplication\fRを起動できます。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBjava HelloApplication \-ORBInitialPort 1050 \-ORBInitialHost MyHost\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+ネーミング・サービスを停止するには、適切なオペレーティング・システム・コマンドを使用します。たとえば、Oracle Solaris上で\fBpkill\fR
+\fBorbd\fRを実行したり、\fBorbd\fRが動作中のDOSウィンドウで\fB[Ctrl]+[C]\fRキーを押します。一時ネーミング・サービスの場合は、サービスが終了されると、ネーミング・サービスに登録された名前が消去される場合があります。Java IDLネーム・サービスは、明示的に停止されるまで実行されます。
+.PP
+ORBDに付属するネーミング・サービスの詳細は、
+http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/idl/jidlNaming\&.htmlの「Naming Service」を参照してください
+.SH "サーバー・マネージャ"
+.PP
+ORBDのサーバー・マネージャにアクセスして、永続サーバーを実行するには、\fBservertool\fRを使用してサーバーを起動する必要があります。servertoolは、アプリケーション・プログラマが、永続サーバーの登録、登録解除、起動および停止を行うためのコマンド行インタフェースです。\fBservertool\fRを使用してサーバーを起動する場合は、\fBorbd\fRが実行されている場所と同じポートとホストで起動する必要があります。サーバーを異なるポートで実行すると、ローカル・コンテキスト用にデータベースに保存されている情報が無効になり、サービスが正しく動作しません。
+.PP
+http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/idl/jidlExample\&.htmlの
+「Java IDL: The "Hello World" Example」を参照してください
+.PP
+この例では、チュートリアルの手順に従って\fBidlj\fRコンパイラと\fBjavac\fRコンパイラを実行します。ORBDのサーバー・マネージャを実行するには、次の手順に従ってアプリケーションを実行します。
+.PP
+\fBorbd\fRを起動します。
+.PP
+Solaris、LinuxまたはOS Xコマンド・シェルで、次のように入力します:
+\fBorbd \-ORBInitialPort 1050\fR
+.PP
+MS\-DOSシステム・プロンプト(Windows)で次のように入力します:
+\fBs\fR\fBtart orbd \-ORBInitialPort 105\fR\fB0\fR
+.PP
+ポート1050はネーム・サーバーを実行するポートです。\fB\-ORBInitialPort\fRオプションは必須コマンド行引数です。Oracle Solarisソフトウェアを使用する場合、1024より小さいポートでプロセスを開始するには、rootユーザーになる必要があります。このため、1024以上のポート番号を使用することをお薦めします。
+.PP
+\fBservertool\fRを起動します:
+\fBservertool \-ORBInitialPort 1050\fR。
+.PP
+前回の手順とネーム・サーバー(\fBorbd\fR)のポートが同じであることを確認します。たとえば\fB\-ORBInitialPort 1050\&.\fRのようになります。\fBservertool\fRは、ネーム・サーバーと同じポート上で起動する必要があります。
+.PP
+\fBservertool\fRコマンド行インタフェースで、\fBservertool\fRプロンプトから\fBHello\fRサーバーを起動します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBservertool > register \-server HelloServer \-classpath \&. \-applicationName\fR
+\fB HelloServerApName\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+\fBservertool\fRによってサーバーが登録されて、\fBHelloServerApName\fRという名前がサーバーに割り当てられ、登録されているすべてのサーバー一覧とともにサーバーIDが表示されます。他の端末ウィンドウまたはプロンプトからクライアント・アプリケーションを実行します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBjava HelloClient \-ORBInitialPort 1050 \-ORBInitialHost localhost\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+この例の\fB\-ORBInitialHost localhost\fRは省略することができます。ネーム・サーバーが\fBHello\fRクライアントとして同一ホスト上で動作しているからです。ネーム・サーバーが別のホストで実行されている場合は、\-\fBORBInitialHost nameserverhost\fRオプションを使用してIDLネーム・サーバーが実行されているホストを指定します。前の手順で行われたとおりにネーム・サーバー(\fBorbd\fR)ポートを指定します(例:
+\fB\-ORBInitialPort 1050\fR)。ORBDのサーバー・マネージャの操作が終了したら、ネーム・サーバー(\fBorbd\fR)と\fBservertool\fRを停止するか終了してください。MS\-DOSプロンプトで\fBorbd\fRをシャットダウンするには、サーバーを実行しているウィンドウを選択して\fB[Ctrl]+[C]\fRキーを押します。
+.PP
+Oracle Solarisから\fBorbd\fRをシャットダウンするには、プロセスを検索して、\fBkill\fRコマンドで終了します。サーバーを明示的に停止するまでは、呼出し待機状態が続きます。\fBservertool\fRをシャットダウンするには、\fBquit\fRと入力してキーボードの\fB[Enter]\fRキーを押します。
+.SH "関連項目"
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+servertool(1)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/idl/jidlNaming\&.htmlの
+「Naming Service」
+.RE
+.br
+'pl 8.5i
+'bp
diff --git a/FCL/src/main/assets/java/man/ja_JP.UTF-8/man1/pack200.1 b/FCL/src/main/assets/java/man/ja_JP.UTF-8/man1/pack200.1
new file mode 100644
index 000000000..153e0fb41
--- /dev/null
+++ b/FCL/src/main/assets/java/man/ja_JP.UTF-8/man1/pack200.1
@@ -0,0 +1,373 @@
+'\" t
+.\" Copyright (c) 2004, 2014, Oracle and/or its affiliates. All rights reserved.
+.\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+.\"
+.\" This code is free software; you can redistribute it and/or modify it
+.\" under the terms of the GNU General Public License version 2 only, as
+.\" published by the Free Software Foundation.
+.\"
+.\" This code 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
+.\" version 2 for more details (a copy is included in the LICENSE file that
+.\" accompanied this code).
+.\"
+.\" You should have received a copy of the GNU General Public License version
+.\" 2 along with this work; if not, write to the Free Software Foundation,
+.\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+.\"
+.\" Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+.\" or visit www.oracle.com if you need additional information or have any
+.\" questions.
+.\"
+.\" Title: pack200
+.\" Language: Japanese
+.\" Date: 2013年11月21日
+.\" SectDesc: Javaデプロイメント・ツール
+.\" Software: JDK 8
+.\" Arch: 汎用
+.\" Part Number: E58103-01
+.\" Doc ID: JSSON
+.\"
+.if n .pl 99999
+.TH "pack200" "1" "2013年11月21日" "JDK 8" "Javaデプロイメント・ツール"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名前"
+pack200 \- WebデプロイメントのためにJARファイルをpack200圧縮ファイルにパッケージします。
+.SH "概要"
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBpack200\fR [\fIoptions\fR] \fIoutput\-file\fR \fIJAR\-file\fR
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+オプションは任意の順序で指定できます。コマンド行またはpropertiesファイルに指定された最後のオプションが、それ以前に指定されたすべてのオプションより優先されます。
+.PP
+\fIoptions\fR
+.RS 4
+コマンド行オプション。オプションを参照してください。
+.RE
+.PP
+\fIoutput\-file\fR
+.RS 4
+出力ファイルの名前。
+.RE
+.PP
+\fIJAR\-file\fR
+.RS 4
+入力ファイルの名前。
+.RE
+.SH "説明"
+.PP
+\fBpack200\fRコマンドは、Java gzipコンプレッサを使用してJARファイルをpack200圧縮ファイルに変換するJavaアプリケーションです。pack200ファイルは高圧縮のファイルで、直接デプロイでき、帯域幅の節約やダウンロード時間の短縮が可能です。
+.PP
+\fBpack200\fRコマンドには、圧縮エンジンの設定や微調整を行うオプションがあります。一般的な使用方法を次の例に示します。\fBmyarchive\&.pack\&.gz\fRがデフォルトの\fBpack200\fRコマンド設定で作成されます。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBpack200 myarchive\&.pack\&.gz myarchive\&.jar\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.SH "オプション"
+.PP
+\-r
+.br
+\-\-repack
+.RS 4
+JARファイルをパックした後アンパックして、JARファイルを生成します。生成されたファイルは\fBjarsigner\fR(1)ツールの入力ファイルとして使用できます。次の例では、myarchive\&.jarファイルをパックした後、アンパックします。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBpack200 \-\-repack myarchive\-packer\&.jar myarchive\&.jar\fR
+\fBpack200 \-\-repack myarchive\&.jar\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+次の例では、入力ファイル内のファイルの順序を保持します。
+.RE
+.PP
+\-g
+.br
+\-\-no\-gzip
+.RS 4
+\fBpack200\fRファイルを生成します。このオプションを指定するときは、適切な圧縮ツールを使用する必要があります。また、ターゲット・システムでは、対応する圧縮解除ツールを使用する必要があります。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBpack200 \-\-no\-gzip myarchive\&.pack myarchive\&.jar\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-G
+.br
+\-\-strip\-debug
+.RS 4
+出力からデバッグ属性を削除します。これには、\fBSourceFile\fR、\fBLineNumberTable\fR、\fBLocalVariableTable\fR、\fBLocalVariableTypeTable\fRが含まれます。これらの属性を削除すれば、ダウンロードとインストールのサイズは小さくなりますが、デバッガの機能は制限されます。
+.RE
+.PP
+\-\-keep\-file\-order
+.RS 4
+入力ファイル内のファイルの順序を保持します。これは、デフォルトの動作です。
+.RE
+.PP
+\-O
+.br
+\-\-no\-keep\-file\-order
+.RS 4
+パック・ツールは、すべての要素を並べ替えて送信します。パック・ツールは、JARディレクトリ名を削除してダウンロード・サイズを削減することもできます。ただし、インデックスなど、特定のJARファイルの最適化機能が正常に動作しなくなることがあります。
+.RE
+.PP
+\-S\fIvalue\fR
+.br
+\-\-segment\-limit=\fIvalue\fR
+.RS 4
+この値は、各アーカイブ・セグメントの予想ターゲット・サイズ\fIN\fR
+(バイト単位)です。単一の入力ファイルの必要サイズが\fIN\fRバイトを超えると、固有のアーカイブ・セグメントが提供されます。特殊なケースとして、値が\fB\-1\fRの場合は、すべての入力ファイルを含む大きな単一のセグメントが生成され、値が0の場合は、クラスごとにセグメントが1つずつ生成されます。アーカイブ・セグメントが大きくなると、断片化が少なくなり圧縮率が高くなりますが、その処理には多くのメモリーが必要です。
+.sp
+各セグメントのサイズは、セグメントに変換されるそれぞれの入力ファイルのサイズのほか、その名前と他の送信されるプロパティのサイズを計算して推測されます。
+.sp
+デフォルトは\-1です。つまり、パック・ツールは単一のセグメント出力ファイルを作成します。極端に大きな出力ファイルが生成される場合には、入力ファイルをセグメント化(分割)してより小さなJARにすることを強くお薦めします。
+.sp
+この制限が課されていない10 MBのJARパック・ファイルは通常、約10%小さくパックされます。しかし、パック・ツールでより大きなJavaヒープ(セグメントの制限の約10倍)を必要とする場合もあります。
+.RE
+.PP
+\-E\fIvalue\fR
+.br
+\-\-effort=\fIvalue\fR
+.RS 4
+単一の10進数値を指定した場合、パック・ツールは、指定された圧縮率でアーカイブを圧縮します。レベル1の場合は、比較的短い圧縮時間で多少大きめのファイルが生成されますが、レベル9の場合は、非常に長い時間がかかるものの、より圧縮率の高いファイルが生成されます。特殊な値0を指定した場合は、\fBpack200\fRコマンドは元のJARファイルを圧縮なしで直接コピーします。JSR 200標準では、すべての解凍プログラムが、この特別な場合をアーカイブ全体のパススルーと解釈するように規定しています。
+.sp
+デフォルトは5です。この場合、標準的な時間で適切な圧縮が行われます。
+.RE
+.PP
+\-H\fIvalue\fR
+.br
+\-\-deflate\-hint=\fIvalue\fR
+.RS 4
+入力情報を保存するというデフォルト値をオーバーライドします。転送されるアーカイブのサイズは大きくなる場合があります。指定可能な値は、\fBtrue\fR、\fBfalse\fRまたは\fBkeep\fRです。
+.sp
+\fBvalue\fRが\fBtrue\fRまたはfalseの場合、\fBpacker200\fRコマンドは指定に従ってデフレーション・ヒントを出力アーカイブに設定します。アーカイブ要素の個々のデフレーション・ヒントは転送されません。
+.sp
+\fBkeep\fR値は、入力JARで確認されたデフレーション・ヒントを保持します。これがデフォルトです。
+.RE
+.PP
+\-m\fIvalue\fR
+.br
+\-\-modification\-time=\fIvalue\fR
+.RS 4
+指定可能な値は\fBlatest\fRと\fBkeep\fRです。
+.sp
+値が最新の場合、パック・ツールは、元のアーカイブの使用可能なすべてのエントリのうちの最終更新時刻か、そのセグメントの使用可能なすべてのエントリの最終更新時刻を特定しようとします。この単一の値はセグメントの一部として転送され、各セグメントの全エントリに適用されます。この場合、すべてのインストール・ファイルに単一の日付が設定されるという問題はありますが、アーカイブの転送サイズを少し小さくすることができます。
+.sp
+値が\fBkeep\fRの場合、入力JARで確認された変更時間が保持されます。これがデフォルトです。
+.RE
+.PP
+\-P\fIfile\fR
+.br
+\-\-pass\-file=\fIfile\fR
+.RS 4
+ファイルを圧縮せず、バイト単位で転送するように指定します。このオプションを繰返し使用して、複数のファイルを指定できます。システム・ファイル・セパレータがJARファイル・セパレータのスラッシュ(/)に置き換えられる点を除き、パス名の変換は行われません。結果として得られるファイル名は、文字列として正確にJARファイルでの出現と一致している必要があります。\fBfile\fRにディレクトリ名を指定した場合、そのディレクトリ内のすべてのファイルが転送されます。
+.RE
+.PP
+\-U\fIaction\fR
+.br
+\-\-unknown\-attribute=\fIaction\fR
+.RS 4
+デフォルトの動作をオーバーライドします。つまり、不明な属性を含むクラス・ファイルが、指定した\fBaction\fRによって渡されます。アクションとして指定可能な値は、\fBerror\fR、\fBstrip\fRまたは\fBpass\fRです。
+.sp
+値が\fBerror\fRの場合、\fBpack200\fRコマンド操作全体が失敗して適切な説明が表示されます。
+.sp
+値が\fBstrip\fRの場合、属性は削除されます。Java Virtual Machine (JVM)必須属性を削除すると、クラス・ローダーの障害が発生することがあります。
+.sp
+値が\fBpass\fRの場合、クラス全体が1つのリソースとして転送されます。
+.RE
+.PP
+\-C\fIattribute\-name\fR=\fIlayout\fR
+.br
+\-\-class\-attribute=\fIattribute\-name\fR=\fIaction\fR
+.RS 4
+次のオプションを参照してください。
+.RE
+.PP
+\-F\fIattribute\-name\fR=\fIlayout\fR
+.br
+\-\-field\-attribute=\fIattribute\-name\fR=\fIaction\fR
+.RS 4
+次のオプションを参照してください。
+.RE
+.PP
+\-M\fIattribute\-name\fR=\fIlayout\fR
+.br
+\-\-method\-attribute=\fIattribute\-name\fR=\fIaction\fR
+.RS 4
+次のオプションを参照してください。
+.RE
+.PP
+\-D\fIattribute\-name\fR=\fIlayout\fR
+.br
+\-\-code\-attribute=\fIattribute\-name\fR=\fIaction\fR
+.RS 4
+前述の4つのオプションでは、クラス・エンティティに\fBclass\-attribute\fR、\fBfield\-attribute\fR、\fBmethod\-attribute\fRおよび\fBcode\-attribute\fRなどの属性のレイアウトを指定できます。\fIattribute\-name\fRには、これからレイアウトまたはアクションを定義する属性の名前を指定します。\fIaction\fRとして指定可能な値は、\fBsome\-layout\-string\fR、\fBerror\fR、\fBstrip\fR、\fBpass\fRです。
+.sp
+\fBsome\-layout\-string\fR: レイアウト言語はJSR 200仕様で定義されています。例:
+\fB\-\-class\-attribute=SourceFile=RUH\fR。
+.sp
+値が\fBerror\fRの場合、\fBpack200\fR操作が失敗して説明が表示されます。
+.sp
+値が\fBstrip\fRの場合、属性が出力から削除されます。VM必須属性を削除するとクラス・ローダーの障害が発生することがあります。たとえば、\fB\-\-class\-attribute=CompilationID=pass\fRというこの属性を含むクラス・ファイルを転送します。パック・ツールは、その他のアクションを行いません。
+.sp
+値が\fBpass\fRの場合、クラス全体が1つのリソースとして転送されます。
+.RE
+.PP
+\-f \fIpack\&.properties\fR
+.br
+\-\-config\-file=\fIpack\&.properties\fR
+.RS 4
+コマンド行に、パック・ツールを初期化するためのJavaプロパティが含まれている構成ファイルを指定できます。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBpack200 \-f pack\&.properties myarchive\&.pack\&.gz myarchive\&.jar\fR
+\fBmore pack\&.properties\fR
+\fB# Generic properties for the packer\&.\fR
+\fBmodification\&.time=latest\fR
+\fBdeflate\&.hint=false\fR
+\fBkeep\&.file\&.order=false\fR
+\fB# This option will cause the files bearing new attributes to\fR
+\fB# be reported as an error rather than passed uncompressed\&.\fR
+\fBunknown\&.attribute=error\fR
+\fB# Change the segment limit to be unlimited\&.\fR
+\fBsegment\&.limit=\-1\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-v
+.br
+\-\-verbose
+.RS 4
+最小限のメッセージを出力します。このオプションを複数指定すると、より長いメッセージが作成されます。
+.RE
+.PP
+\-q
+.br
+\-\-quiet
+.RS 4
+メッセージを表示せずに動作するように指定します。
+.RE
+.PP
+\-l\fIfilename\fR
+.br
+\-\-log\-file=\fIfilename\fR
+.RS 4
+出力メッセージのログ・ファイルを指定します。
+.RE
+.PP
+\-?
+.br
+\-h
+.br
+\-\-help
+.RS 4
+このコマンドに関するヘルプ情報を出力します。
+.RE
+.PP
+\-V
+.br
+\-\-version
+.RS 4
+このコマンドに関するバージョン情報を出力します。
+.RE
+.PP
+\-J\fIoption\fR
+.RS 4
+指定されたオプションをJava Virtual Machineに渡します。詳細は、java(1)コマンドのリファレンス・ページを参照してください。たとえば、\fB\-J\-Xms48m\fRと指定すると、スタートアップ・メモリーは48MBに設定されます。
+.RE
+.SH "終了ステータス"
+.PP
+次の終了値が返されます: 正常終了の場合は0、エラーが発生した場合は0より大きい値。
+.SH "注意"
+.PP
+このコマンドと\fBpack\fR(1)を混同しないでください。\fBpack\fRおよび\fBpack200\fRコマンドは、別々の製品です。
+.PP
+JDKに付属するJava SE API仕様との相違が見つかった場合には、仕様を優先してください。
+.SH "関連項目"
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+unpack200(1)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+jar(1)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+jarsigner(1)
+.RE
+.br
+'pl 8.5i
+'bp
diff --git a/FCL/src/main/assets/java/man/ja_JP.UTF-8/man1/policytool.1 b/FCL/src/main/assets/java/man/ja_JP.UTF-8/man1/policytool.1
new file mode 100644
index 000000000..a755d63c6
--- /dev/null
+++ b/FCL/src/main/assets/java/man/ja_JP.UTF-8/man1/policytool.1
@@ -0,0 +1,177 @@
+'\" t
+.\" Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved.
+.\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+.\"
+.\" This code is free software; you can redistribute it and/or modify it
+.\" under the terms of the GNU General Public License version 2 only, as
+.\" published by the Free Software Foundation.
+.\"
+.\" This code 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
+.\" version 2 for more details (a copy is included in the LICENSE file that
+.\" accompanied this code).
+.\"
+.\" You should have received a copy of the GNU General Public License version
+.\" 2 along with this work; if not, write to the Free Software Foundation,
+.\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+.\"
+.\" Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+.\" or visit www.oracle.com if you need additional information or have any
+.\" questions.
+.\"
+.\" Title: policytool
+.\" Language: Japanese
+.\" Date: 2015年3月3日
+.\" SectDesc: セキュリティ・ツール
+.\" Software: JDK 8
+.\" Arch: 汎用
+.\" Part Number: E58103-01
+.\" Doc ID: JSSON
+.\"
+.if n .pl 99999
+.TH "policytool" "1" "2015年3月3日" "JDK 8" "セキュリティ・ツール"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名前"
+policytool \- ユーティリティGUI経由で取得したユーザー入力に基づいて、プレーン・テキストのポリシー・ファイルを読み書きします。
+.SH "概要"
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBpolicytool\fR [ \fB\-file\fR ] [ \fIfilename\fR ]
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+\-file
+.RS 4
+ポリシー・ファイルを読み込むように\fBpolicytool\fRに指示します。
+.RE
+.PP
+\fIfilename\fR
+.RS 4
+ロードするファイルの名前。
+.RE
+.PP
+\fB例\fR:
+.PP
+ポリシー・ツール管理ユーティリティを実行します:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBpolicytool\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+\fBpolicytool\fRコマンドを実行し、指定されたファイルをロードします:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBpolicytool \-file \fR\fB\fImypolicyfile\fR\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.SH "説明"
+.PP
+\fBpolicytool\fRコマンドは、管理者のGUIを呼び出します。これにより、システム管理者はローカル・ポリシー・ファイルの内容を管理できるようになります。ポリシー・ファイルは\fB\&.policy\fR拡張子を持つプレーンテキスト・ファイルで、ドメイン別にリモート・リクエスタを権限オブジェクトにマップします。詳細は、http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/PolicyFiles\&.htmlにある
+「Default Policy Implementation and Policy File Syntax」を参照してください
+.SH "オプション"
+.PP
+\-file
+.RS 4
+ポリシー・ファイルを読み込むように\fBpolicytool\fRに指示します。
+.RE
+.SH "関連項目"
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+「Default Policy Implementation and Policy File Syntax」
+(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/PolicyFiles\&.html)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+「Policy File Creation and Management」
+(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/PolicyGuide\&.html)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+「Permissions in Java SE Development Kit (JDK)」
+(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/permissions\&.html)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+「Java Security Overview」
+(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/overview/jsoverview\&.html)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+「Java Cryptography Architecture (JCA) Reference Guide」
+(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/crypto/CryptoSpec\&.html)
+.RE
+.br
+'pl 8.5i
+'bp
diff --git a/FCL/src/main/assets/java/man/ja_JP.UTF-8/man1/rmid.1 b/FCL/src/main/assets/java/man/ja_JP.UTF-8/man1/rmid.1
new file mode 100644
index 000000000..3eb8cfa27
--- /dev/null
+++ b/FCL/src/main/assets/java/man/ja_JP.UTF-8/man1/rmid.1
@@ -0,0 +1,373 @@
+'\" t
+.\" Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
+.\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+.\"
+.\" This code is free software; you can redistribute it and/or modify it
+.\" under the terms of the GNU General Public License version 2 only, as
+.\" published by the Free Software Foundation.
+.\"
+.\" This code 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
+.\" version 2 for more details (a copy is included in the LICENSE file that
+.\" accompanied this code).
+.\"
+.\" You should have received a copy of the GNU General Public License version
+.\" 2 along with this work; if not, write to the Free Software Foundation,
+.\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+.\"
+.\" Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+.\" or visit www.oracle.com if you need additional information or have any
+.\" questions.
+.\"
+.\" Title: rmid
+.\" Language: Japanese
+.\" Date: 2013年11月21日
+.\" SectDesc: Remote Method Invocation (RMI)ツール
+.\" Software: JDK 8
+.\" Arch: 汎用
+.\" Part Number: E58103-01
+.\" Doc ID: JSSON
+.\"
+.if n .pl 99999
+.TH "rmid" "1" "2013年11月21日" "JDK 8" "Remote Method Invocation (RMI)"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名前"
+rmid \- 起動システム・デーモンを開始すると、オブジェクトをJava Virtual Machine(VM)に登録してアクティブ化できるようになります。
+.SH "概要"
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBrmid\fR [\fIoptions\fR]
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+\fIoptions\fR
+.RS 4
+コマンド行オプション。オプションを参照してください。
+.RE
+.SH "説明"
+.PP
+\fBrmid\fRコマンドは、起動システム・デーモンを開始します。起動システム・デーモンを開始してからでないと、アクティブ化可能オブジェクトをアクティブ化システムに登録したり、JVM内でアクティブ化したりすることができません。アクティブ化可能なオブジェクトを使用するプログラムの作成方法の詳細は、\fIアクティブ化の使用\fRに関するチュートリアル(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/rmi/activation/overview\&.html)を参照してください
+.PP
+\fBrmid\fRコマンドを実行し、次のようにセキュリティ・ポリシー・ファイルを指定して、デーモンを起動します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBrmid \-J\-Djava\&.security\&.policy=rmid\&.policy\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+\fBrmid\fRコマンドのOracleの実装を実行する場合、デフォルトでは、セキュリティ・ポリシー・ファイルを指定する必要があります。それは、\fBrmid\fRコマンドが起動グループ用にJVMを起動するために各\fBActivationGroupDesc\fR内の情報を使用できるかどうかを検証できるようにするためです特に、\fBActivationGroupDesc\fRコンストラクタに渡される\fBCommandEnvironment\fRや任意のプロパティによって指定されるコマンドおよびオプションは、\fBrmid\fRコマンドのセキュリティ・ポリシー・ファイルの中で明示的に許可することが必要になりました。\fBsun\&.rmi\&.activation\&.execPolicy\fRプロパティの値は、起動グループ用にJVMを起動するために\fBActivationGroupDesc\fR内の情報を使用できるかどうかを判断するときに\fBrmid\fRコマンドが使用するポリシーを決定します。詳細は、\-J\-Dsun\&.rmi\&.activation\&.execPolicy=policyオプションの説明を参照してください。
+.PP
+\fBrmid\fRコマンドを実行すると、デフォルト・ポート1098でアクティベータと内部レジストリが起動され、\fBActivationSystem\fRがこの内部レジストリ内の名前\fBjava\&.rmi\&.activation\&.ActivationSystem\fRにバインドされます。
+.PP
+レジストリに他のポートを指定するには、\fBrmid\fRコマンドの実行時に\fB\-port\fRオプションを指定する必要があります。たとえば、次のコマンドは、レジストリのデフォルト・ポート1099で、起動システム・デーモンとレジストリを起動します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBrmid \-J\-Djava\&.security\&.policy=rmid\&.policy \-port 1099\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.SH "必要に応じてRMIDを開始"
+.PP
+\fBrmid\fRをコマンド行から開始するには、\fBinetd\fR(Oracle Solarisの場合)、または\fBxinetd\fR(Linuxの場合)を構成して\fBrmid\fRを必要に応じて開始する方法もあります。
+.PP
+RMIDを開始すると、\fBSystem\&.inheritedChannel\fRメソッドを呼び出して、継承されたチャンネル(\fBinetd\fR/\fBxinetd\fRから継承)を取得しようとします。継承されたチャンネルがnullであるか、\fBjava\&.nio\&.channels\&.ServerSocketChannel\fRのインスタンスでなかった場合、RMIDはそのチャンネルは\fBinetd\fR/\fBxinetd\fRによって起動されたものではないと判断し、前述のように起動します。
+.PP
+継承されたチャンネルが\fBServerSocketChannel\fRインスタンスである場合は、RMIDはエクスポートするリモート・オブジェクト、つまり\fBjava\&.rmi\&.activation\&.ActivationSystem\fRがバインドされているレジストリと\fBjava\&.rmi\&.activation\&.Activator\fRリモート・オブジェクトに対するリクエストを受信するサーバー・ソケットとして、\fBServerSocketChannel\fRから取得した\fBjava\&.net\&.ServerSocket\fRを使用します。このモードでは、RMIDの動作は、次のことを除いて、コマンド行から起動した場合と同じです。
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fBSystem\&.err\fRに対する出力は、ファイルにリダイレクトされる。このファイルは\fBjava\&.io\&.tmpdir\fRシステム・プロパティで指定されるディレクトリ(通常は\fB/var/tmp\fRまたは\fB/tmp\fR)にある。ファイル名の接頭辞は\fBrmid\-err\fRで、接尾辞は\fBtmp\fRである。
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fB\-port\fRオプションは使用できません。このオプションが指定されている場合、RMIDはエラー・メッセージが表示されて終了します。
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fB\-log\fRオプションは必須。このオプションが指定されていない場合、RMIDはエラー・メッセージが表示されて終了します。
+.RE
+.PP
+必要に応じてサービスを開始するように構成する方法の詳細は、\fBinetd\fR
+(Oracle Solarisの場合)、または\fBxinetd\fR
+(Linux)のマニュアル・ページを参照してください。
+.SH "オプション"
+.PP
+\-C\fIオプション\fR
+.RS 4
+\fBrmid\fRコマンドの子プロセス(起動グループ)が作成されたときに、それぞれの子プロセスにコマンド行引数として渡されるオプションを指定します。たとえば、次のように指定すると、起動システム・デーモンによって生成される各仮想マシンにプロパティを渡すことができます。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBrmid \-C\-Dsome\&.property=value\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+コマンド行引数を子プロセスに渡す機能は、デバッグを行う場合に便利です。たとえば、次のコマンドでは、すべての子JVMでserver\-callロギングが可能です。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBrmid \-C\-Djava\&.rmi\&.server\&.logCalls=true\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-J\fIoption\fR
+.RS 4
+RMIDを実行しているJavaインタプリタに渡すオプションを指定します。たとえば、\fBrmid\fRコマンドが\fBrmid\&.policy\fRという名前のポリシー・ファイルを使用するように指定するには、\fBrmid\fRのコマンド行で\fB\-J\fRオプションを使用して、\fBjava\&.security\&.policy\fRプロパティを定義します。次に例を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBrmid \-J\-Djava\&.security\&.policy\-rmid\&.policy\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-J\-Dsun\&.rmi\&.activation\&.execPolicy=\fIpolicy\fR
+.RS 4
+起動グループが実行されることになるJVMの起動に使用するコマンドおよびコマンド行オプションをチェックするために、RMIDが採用するポリシーを指定します。このオプションは、Java RMI起動デーモンのOracleの実装のみに存在することに注意してください。コマンド行にこのプロパティを指定しない場合、結果は\fB\-J\-Dsun\&.rmi\&.activation\&.execPolicy=default\fRを指定した場合と同じになります。\fBpolicy\fRに指定可能な値は、\fBdefault\fR、\fBpolicyClassName\fRまたは\fBnone\fRです。
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+デフォルト
+.sp
+\fBdefault\fRまたは未指定値の\fBexecPolicy\fRの場合、\fBrmid\fRコマンドが実行できるのは、\fBrmid\fRコマンドが使用するセキュリティ・ポリシー・ファイルの中で、実行する権限が\fBrmid\fRに与えられているコマンドおよびコマンド行オプションのみです。デフォルトの実行ポリシーで使用できるのは、デフォルトの起動グループ実装のみです。
+.sp
+\fBrmid\fRコマンドは、起動グループ用のJVMを起動するときに、そのグループについて登録された起動グループ記述子である\fBActivationGroupDesc\fR内の情報を使用します。グループ記述子は、\fBActivationGroupDesc\&.CommandEnvironment\fRを指定します(省略可能)。これには、起動グループを開始するコマンドと、そのコマンド行に追加できるコマンド行オプションが含まれています。デフォルトでは、\fBrmid\fRコマンドは\fBjava\&.home\fRにある\fBjava\fRコマンドを使用します。グループ記述子には、コマンド行にオプションとして追加されるプロパティ・オーバーライドも含まれます(\fB\-D=\fRとして定義されます)。\fBcom\&.sun\&.rmi\&.rmid\&.ExecPermission\fR権限は\fBrmid\fRコマンドに、起動グループを開始するためにグループ記述子の\fBCommandEnvironment\fRで指定されたコマンドを実行する権限を付与します。\fBcom\&.sun\&.rmi\&.rmid\&.ExecOptionPermission\fR権限は起動グループの開始時に、グループ記述子でプロパティ・オーバーライドとして、または\fBCommandEnvironment\fRでオプションとして指定されたコマンド行オプションを、\fBrmid\fRコマンドが使用することを許可します。\fBrmid\fRコマンドに様々なコマンドおよびオプションを実行する権限を付与する場合、権限\fBExecPermission\fRおよび\fBExecOptionPermission\fRをすべてのコード・ソースに付与する必要があります。
+.sp
+\fBExecPermission\fR
+.sp
+\fBExecPermission\fRクラスは、起動グループを開始するために\fBrmid\fRコマンドが特定のコマンドを実行する権限を表します。
+.sp
+\fB構文\fR:
+\fBExecPermission\fRの名前は、\fBrmid\fRコマンドに実行を許可するコマンドのパス名です。スラッシュ(/)およびアスタリスク(*)で終わるパス名は、そのディレクトリに含まれるすべてのファイルを示します。スラッシュはファイル区切り文字\fBFile\&.separatorChar\fRです。スラッシュ(/)およびマイナス符号(\-)で終わるパス名は、そのディレクトリに含まれるすべてのファイルとサブディレクトリ(再帰的に)を示します。特殊なトークン\fB<>\fRで構成されるパス名は、どのファイルとも一致します。
+.sp
+パス名にアスタリスク(*)を指定した場合は、現在のディレクトリ内のすべてのファイルを示します。パス名にマイナス符号(\-)を指定した場合は、現在のディレクトリ内のすべてのファイルおよび(再帰的に)現在のディレクトリに含まれるすべてのファイルとサブディレクトリを示します。
+.sp
+\fBExecOptionPermission\fR
+.sp
+\fBExecOptionPermission\fRクラスは、起動グループを開始するときに\fBrmid\fRコマンドで特定のコマンド行オプションを使用できる権限を表します。\fBExecOptionPermission\fRの名前は、コマンド行オプションの値です。
+.sp
+\fB構文\fR: オプションでは、ワイルドカードが限定的にサポートされます。アスタリスクは、ワイルドカード・マッチを表します。アスタリスク(*)は、オプション名そのものとして使用できます。つまり、任意のオプションを表すことができます。また、オプション名の末尾に使用することもできます。ただし、ドット(\&.)か等号(=)の直後にアスタリスク(*)を指定する必要があります。
+.sp
+例:
+\fB*\fRや\fB\-Dmydir\&.*\fRや\fB\-Da\&.b\&.c=*\fRは有効ですが、\fB*mydir\fRや\fB\-Da*b\fRや\fBab*\fRは無効です。
+.sp
+\fBrmidのポリシー・ファイル\fR
+.sp
+\fBrmid\fRコマンドに様々なコマンドおよびオプションを実行する権限を許可する場合は、権限\fBExecPermission\fRおよび\fBExecOptionPermission\fRをすべてのコード・ソースに付与する必要があります(汎用的に)。これらの権限をチェックするのは\fBrmid\fRコマンドのみなので、これらの権限を汎用的に付与しても安全です。
+.sp
+\fBrmid\fRコマンドに各種の実行権限を付与するポリシー・ファイルの例を、次に示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBgrant {\fR
+\fB permission com\&.sun\&.rmi\&.rmid\&.ExecPermission\fR
+\fB "/files/apps/java/jdk1\&.7\&.0/solaris/bin/java";\fR
+\fB \fR
+\fB permission com\&.sun\&.rmi\&.rmid\&.ExecPermission\fR
+\fB "/files/apps/rmidcmds/*";\fR
+\fB \fR
+\fB permission com\&.sun\&.rmi\&.rmid\&.ExecOptionPermission\fR
+\fB "\-Djava\&.security\&.policy=/files/policies/group\&.policy";\fR
+\fB \fR
+\fB permission com\&.sun\&.rmi\&.rmid\&.ExecOptionPermission\fR
+\fB "\-Djava\&.security\&.debug=*";\fR
+\fB \fR
+\fB permission com\&.sun\&.rmi\&.rmid\&.ExecOptionPermission\fR
+\fB "\-Dsun\&.rmi\&.*";\fR
+\fB};\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+最初に付与されている権限は、\fBrmid\fRコマンドに対し、パス名により明示的に指定される\fBjava\fRコマンドの1\&.7\&.0リリースの実行を許可します。デフォルトでは、\fBjava\&.home\fRにあるバージョンの\fBjava\fRコマンドを使用します。\fBrmid\fRコマンドが使用するのと同じバージョンが使用されるため、そのコマンドは、ポリシー・ファイルで指定する必要はありません。2番目の権限は、\fBrmid\fRコマンドに対して、ディレクトリ\fB/files/apps/rmidcmds\fR内の任意のコマンドの実行権限を許可します。
+.sp
+3番目に付与されている権限\fBExecOptionPermission\fRは、\fBrmid\fRコマンドに対して、セキュリティ・ポリシー・ファイルを\fB/files/policies/group\&.policy\fRとして定義している起動グループの開始を許可します。次の権限は、起動グループが\fBjava\&.security\&.debug property\fRを使用することを許可しています。最後の権限は、起動グループが\fBsun\&.rmi property\fR名の階層内の任意のプロパティを使用することを許可しています。
+.sp
+ポリシー・ファイルを指定して\fBrmid\fRコマンドを起動するには、\fBrmid\fRのコマンド行で\fBjava\&.security\&.policy\fRプロパティを指定する必要があります。次に例を示します。
+.sp
+\fBrmid \-J\-Djava\&.security\&.policy=rmid\&.policy\fR\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+
+.sp
+デフォルトの動作では十分な柔軟性が得られない場合、管理者は、\fBrmid\fRの起動時に、\fBcheckExecCommand\fRメソッドが所属するクラスの名前を指定して、\fBrmid\fRコマンドが実行するコマンドをチェックすることができます。
+.sp
+\fBpolicyClassName\fRには、引数なしのコンストラクタを持ち、次のような\fBcheckExecCommand\fRメソッドを実装しているpublicクラスを指定します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB public void checkExecCommand(ActivationGroupDesc desc, String[] command)\fR
+\fB throws SecurityException;\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+起動グループを開始する前に、\fBrmid\fRコマンドは、ポリシーの\fBcheckExecCommand\fRメソッドを呼び出します。このとき、起動グループの記述子と、起動グループを開始するための完全なコマンドを含む配列をそのメソッドに渡します。\fBcheckExecCommand\fRが\fBSecurityException\fRをスローすると、\fBrmid\fRコマンドはその起動グループを開始せず、オブジェクトの起動を試行している呼出し側には\fBActivationException\fRがスローされます。
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+none
+.sp
+\fBsun\&.rmi\&.activation\&.execPolicy\fRプロパティの値が\fBnone\fRの場合、\fBrmid\fRコマンドは、起動グループを開始するコマンドをまったく検証しません。
+.RE
+.RE
+.PP
+\-log \fIdir\fR
+.RS 4
+起動システム・デーモンがデータベースおよび関連情報を書き込むのに使用するディレクトリの名前を指定します。デフォルトでは、\fBrmid\fRコマンドを実行したディレクトリに、logというログ・ディレクトリが作成されます。
+.RE
+.PP
+\-port \fIport\fR
+.RS 4
+レジストリが使用するポートを指定します。起動システム・デーモンは、このレジストリの中で、\fBjava\&.rmi\&.activation\&.ActivationSystem\fRという名前で\fBActivationSystem\fRをバインドします。ローカル・マシン上の\fBActivationSystem\fRは、次のように\fBNaming\&.lookup\fRメソッドを呼び出すことによって取得できます。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBimport java\&.rmi\&.*; \fR
+\fB import java\&.rmi\&.activation\&.*;\fR
+\fB \fR
+\fB ActivationSystem system; system = (ActivationSystem)\fR
+\fB Naming\&.lookup("//:port/java\&.rmi\&.activation\&.ActivationSystem");\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-stop
+.RS 4
+\fB\-port\fRオプションによって指定されたポートの、現在の\fBrmid\fRコマンドの呼出しを停止します。ポートが指定されていない場合は、このオプションはポート1098で実行されている\fBrmid\fRの呼出しを停止します。
+.RE
+.SH "環境変数"
+.PP
+CLASSPATH
+.RS 4
+ユーザー定義クラスへのパスをシステムに指定します。ディレクトリはコロンで区切られます。例:
+\fB\&.:/usr/local/java/classes\fR
+.RE
+.SH "関連項目"
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+java(1)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+クラス・パスの設定
+.RE
+.br
+'pl 8.5i
+'bp
diff --git a/FCL/src/main/assets/java/man/ja_JP.UTF-8/man1/rmiregistry.1 b/FCL/src/main/assets/java/man/ja_JP.UTF-8/man1/rmiregistry.1
new file mode 100644
index 000000000..9512dc5d1
--- /dev/null
+++ b/FCL/src/main/assets/java/man/ja_JP.UTF-8/man1/rmiregistry.1
@@ -0,0 +1,135 @@
+'\" t
+.\" Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+.\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+.\"
+.\" This code is free software; you can redistribute it and/or modify it
+.\" under the terms of the GNU General Public License version 2 only, as
+.\" published by the Free Software Foundation.
+.\"
+.\" This code 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
+.\" version 2 for more details (a copy is included in the LICENSE file that
+.\" accompanied this code).
+.\"
+.\" You should have received a copy of the GNU General Public License version
+.\" 2 along with this work; if not, write to the Free Software Foundation,
+.\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+.\"
+.\" Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+.\" or visit www.oracle.com if you need additional information or have any
+.\" questions.
+.\"
+.\" Title: rmiregistry
+.\" Language: Japanese
+.\" Date: 2013年11月21日
+.\" SectDesc: Remote Method Invocation (RMI)ツール
+.\" Software: JDK 8
+.\" Arch: 汎用
+.\" Part Number: E58103-01
+.\" Doc ID: JSSON
+.\"
+.if n .pl 99999
+.TH "rmiregistry" "1" "2013年11月21日" "JDK 8" "Remote Method Invocation (RMI)"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名前"
+rmiregistry \- 現在のホストの指定したポート上にリモート・オブジェクト・レジストリを開始します。
+.SH "概要"
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBrmiregistry\fR [ \fIport\fR ]
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+\fIport\fR
+.RS 4
+リモート・オブジェクト・レジストリを開始する現在のホスト上の\fBport\fRの数。
+.RE
+.SH "説明"
+.PP
+\fBrmiregistry\fRコマンドは、現在のホストの指定したポート上にリモート・オブジェクト・レジストリを作成し、開始します。portの指定を省略した場合、レジストリはポート1099で開始します。\fBrmiregistry\fRコマンドに、出力機能はありません。通常、これはバックグラウンドで実行されます。次に例を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBrmiregistry &\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+リモート・オブジェクト・レジストリは、ブートストラップのネーム・サービスです。同一ホストのRMIサーバーが、リモート・オブジェクトを名前にバインドするために使用されます。次に、ローカルおよびリモート・ホストのクライアントはリモート・オブジェクトを検索し、リモート・メソッドの呼出しを行います。
+.PP
+レジストリは、一般的に、最初のリモート・オブジェクトの位置を指定します。そこで、アプリケーションはメソッドを呼び出す必要があります。その後、そのオブジェクトはアプリケーション指定のサポートを提供し、他のオブジェクトを探します。
+.PP
+\fBjava\&.rmi\&.registry\&.LocateRegistry\fRクラスのメソッドは、ローカル・ホスト、またはローカル・ホストとポートで動作するレジストリを取得するために使用されます。
+.PP
+\fBjava\&.rmi\&.Naming\fRクラスのURLベース・メソッドはレジストリに対して操作を実行し、任意のホストおよびローカル・ホストでのリモート・オブジェクトの検索に使用できます。単純名(文字列)をリモート・オブジェクトにバインドし、新しい名前をリモート・オブジェクトに再バインドし(古いバインドをオーバーライド)、リモート・オブジェクトをアンバインドし、レジストリにバインドされているURLをリスト表示します。
+.SH "オプション"
+.PP
+\-J
+.RS 4
+Javaオプションとともに使用して、\fB\-J\fRの後ろに続くオプションをJavaインタプリタに引き渡します(\fB\-J\fRとオプションの間にスペースは入れません)。
+.RE
+.SH "関連項目"
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+java(1)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fB「java\&.rmi\&.registry\&.LocateRegistry」\fR(http://docs\&.oracle\&.com/javase/8/docs/api/java/rmi/registry/LocateRegistry\&.html)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fB「java\&.rmi\&.Naming class description」\fR(http://docs\&.oracle\&.com/javase/8/docs/api/java/rmi/Naming\&.html)
+.RE
+.br
+'pl 8.5i
+'bp
diff --git a/FCL/src/main/assets/java/man/ja_JP.UTF-8/man1/servertool.1 b/FCL/src/main/assets/java/man/ja_JP.UTF-8/man1/servertool.1
new file mode 100644
index 000000000..6456e743c
--- /dev/null
+++ b/FCL/src/main/assets/java/man/ja_JP.UTF-8/man1/servertool.1
@@ -0,0 +1,201 @@
+'\" t
+.\" Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved.
+.\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+.\"
+.\" This code is free software; you can redistribute it and/or modify it
+.\" under the terms of the GNU General Public License version 2 only, as
+.\" published by the Free Software Foundation.
+.\"
+.\" This code 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
+.\" version 2 for more details (a copy is included in the LICENSE file that
+.\" accompanied this code).
+.\"
+.\" You should have received a copy of the GNU General Public License version
+.\" 2 along with this work; if not, write to the Free Software Foundation,
+.\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+.\"
+.\" Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+.\" or visit www.oracle.com if you need additional information or have any
+.\" questions.
+.\"
+.\" Title: servertool
+.\" Language: Japanese
+.\" Date: 2013年11月21日
+.\" SectDesc: Java IDLおよびRMI-IIOPツール
+.\" Software: JDK 8
+.\" Arch: 汎用
+.\" Part Number: E58103-01
+.\" Doc ID: JSSON
+.\"
+.if n .pl 99999
+.TH "servertool" "1" "2013年11月21日" "JDK 8" "Java IDLおよびRMI-IIOPツール"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名前"
+servertool \- 開発者が永続サーバーを登録、登録解除、起動、停止するための使いやすいユーザー・インタフェースを提供します。
+.SH "概要"
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBservertool\fR \-ORBInitialPort \fInameserverport\fR [ \fIoptions\fR ] [ \fIcommands \fR]
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+\fIoptions\fR
+.RS 4
+コマンド行オプション。オプションを参照してください。
+.RE
+.PP
+commands
+.RS 4
+コマンド行コマンド。コマンドを参照してください。
+.RE
+.PP
+\fBservertool\fR\fBservertool >\fR\fBservertool >\fR
+.SH "説明"
+.PP
+\fBservertool\fRコマンドは、開発者が永続サーバーを登録、登録解除、起動、停止するためのコマンド行インタフェースを提供します。コマンド行コマンドを使用すると、サーバーに関する様々な統計情報を取得できます。コマンドを参照してください。
+.SH "オプション"
+.PP
+\-ORBInitialHost \fInameserverhost\fR
+.RS 4
+このオプションは必須です。ネーム・サーバーが実行され、着信リクエストをリスニングするホスト・マシンを指定します。\fBnameserverhost\fR値は、\fBorb\fRが実行され、リクエストをリスニングしているポートを指定する必要があります。このオプションを指定しない場合、値はデフォルトで\fBlocalhost\fRに設定されます。\fBorbd\fRと\fBservertool\fRが異なるマシン上で実行されている場合は、\fBorbd\fRが実行されているホストの名前またはIPアドレスを指定する必要があります。
+.sp
+\fB注意:\fR
+Oracle Solarisでは、1024より小さいポート上でプロセスを開始するには、rootユーザーになる必要があります。\fBnameserverport\fR値には、1024以上のポート番号を使用することをお薦めします。
+.RE
+.PP
+\-J\fIoption\fR
+.RS 4
+Java Virtual Machineに\fBoption\fRを渡します。\fBoption\fRには、Javaアプリケーション起動ツールのリファレンス・ページに記載されているオプションを1つ指定します。たとえば、\fB\-J\-Xms48m\fRと指定すると、スタートアップ・メモリーは48MBに設定されます。java(1)を参照してください。
+.RE
+.SH "コマンド"
+.PP
+\fBservertool\fRコマンドは、コマンド行コマンドを使用して、または使用せずに起動できます。
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fBservertool\fRの起動時にコマンドを指定しなかった場合、コマンド行ツールにコマンド入力を求める\fBservertool\fRプロンプトが表示されます:
+\fBservertool >\fR。
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fBservertool\fRの起動時にコマンドを指定した場合、Java IDL Server Toolが起動してコマンドを実行し、終了します。
+.RE
+.PP
+register \-server \fIserver\-class\-name\fR \-classpath \fIclasspath\-to\-server\fR [ \-applicationName \fIapplication\-name\fR \-args \fIargs\-to\-server\fR \-vmargs \fIflags\-for\-JVM\fR ]
+.RS 4
+Object Request Broker Daemon (ORBD)に新規永続サーバーを登録します。サーバーが未登録の場合、登録してアクティブ化します。このコマンドによって、\fB\-server\fRオプションで識別されるサーバーの\fBメイン\fR・クラス内でインストール・メソッドが呼び出されます。このインストール・メソッドは、\fBpublic static void install(org\&.omg\&.CORBA\&.ORB)\fRになっている必要があります。インストール・メソッドはオプションであり、開発者はデータベース・スキーマの作成など独自のサーバー・インストール動作を指定できます。
+.RE
+.PP
+unregister \-serverid \fIserver\-id\fR | \-applicationName \fIapplication\-name\fR
+.RS 4
+サーバーIDまたはアプリケーション名で、サーバーをORBDから登録解除します。このコマンドによって、\fB\-server\fRオプションで識別されるサーバーの\fBメイン\fR・クラス内でアンインストール・メソッドが呼び出されます。
+\fBuninstall\fRメソッドは、\fBpublic static void uninstall(org\&.omg\&.CORBA\&.ORB)\fRになっている必要があります。\fBuninstall\fRメソッドはオプションであり、開発者は\fBinstall\fRメソッドの動作の取消など、独自のサーバー・アンインストール動作を指定できます。
+.RE
+.PP
+getserverid \-applicationName \fIapplication\-name\fR
+.RS 4
+\fBapplication\-name\fR値に対応するサーバーIDを返します。
+.RE
+.PP
+list
+.RS 4
+ORBDに登録されているすべての永続サーバーに関する情報を一覧表示します。
+.RE
+.PP
+listappnames
+.RS 4
+現在ORBDに登録されているすべてのサーバーのアプリケーション名を一覧表示します。
+.RE
+.PP
+listactive
+.RS 4
+ORBDによって起動され、現在実行されているすべての永続サーバーに関する情報を一覧表示します。
+.RE
+.PP
+locate \-serverid \fIserver\-id\fR | \-applicationName \fIapplication\-name\fR [ \-endpointType \fIendpointType\fR ]
+.RS 4
+登録されたサーバーで作成したすべてのORBの特定のタイプについてエンドポイント(ポート)を検出します。サーバーが実行されていない場合、アクティブ化されます。\fBendpointType\fR値が指定されていない場合、サーバーのORBごとに関連付けられているplainタイプまたはnon\-protectedタイプのエンドポイントが返されます。
+.RE
+.PP
+locateperorb \-serverid \fIserver\-id\fR | \-applicationName \fIapplication\-name\fR [ \-orbid \fIORB\-name\fR ]
+.RS 4
+登録されたサーバーの特定のObject Request Broker (ORB)で登録されたエンドポイント(ポート)を検出します。サーバーが実行されていない場合、アクティブ化されます。\fBorbid\fRが指定されていない場合、デフォルト値の\fB""\fRが\fBorbid\fRに割り当てられます。ORBが空文字列の\fBorbid\fRで作成されている場合、登録したポートがすべて返されます。
+.RE
+.PP
+orblist \-serverid \fIserver\-id\fR | \-applicationName \fIapplication\-name\fR
+.RS 4
+サーバー上に定義されたORBの\fBORBId\fRを一覧表示します。\fBORBId\fRはサーバーで作成されたORBの文字列名です。サーバーが実行されていない場合、アクティブ化されます。
+.RE
+.PP
+shutdown \-serverid \fIserver\-id\fR | \-applicationName application\-name
+.RS 4
+ORBDに登録されたアクティブなサーバーを停止します。このコマンドの実行中に、\fB\-serverid\fRパラメータまたは\fB\-applicationName\fRパラメータで指定されたクラス内に定義された\fBshutdown\fRメソッドも呼び出されてサーバー・プロセスを停止します。
+.RE
+.PP
+startup \-serverid \fIserver\-id\fR | \-applicationName application\-name
+.RS 4
+ORBDに登録されたサーバーを起動またはアクティブ化します。サーバーが実行されていない場合、このコマンドがサーバーを起動します。サーバーがすでに実行されている場合は、エラー・メッセージが表示されます。
+.RE
+.PP
+help
+.RS 4
+\fBservertool\fRコマンドを介してサーバーが利用できるすべてのコマンドをリストします。
+.RE
+.PP
+quit
+.RS 4
+\fBservertool\fRコマンドを終了します。
+.RE
+.SH "関連項目"
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+orbd(1)
+.RE
+.br
+'pl 8.5i
+'bp
diff --git a/FCL/src/main/assets/java/man/ja_JP.UTF-8/man1/tnameserv.1 b/FCL/src/main/assets/java/man/ja_JP.UTF-8/man1/tnameserv.1
new file mode 100644
index 000000000..70d4ea4ae
--- /dev/null
+++ b/FCL/src/main/assets/java/man/ja_JP.UTF-8/man1/tnameserv.1
@@ -0,0 +1,446 @@
+'\" t
+.\" Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved.
+.\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+.\"
+.\" This code is free software; you can redistribute it and/or modify it
+.\" under the terms of the GNU General Public License version 2 only, as
+.\" published by the Free Software Foundation.
+.\"
+.\" This code 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
+.\" version 2 for more details (a copy is included in the LICENSE file that
+.\" accompanied this code).
+.\"
+.\" You should have received a copy of the GNU General Public License version
+.\" 2 along with this work; if not, write to the Free Software Foundation,
+.\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+.\"
+.\" Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+.\" or visit www.oracle.com if you need additional information or have any
+.\" questions.
+.\"
+.\" Title: tnameserv
+.\" Language: Japanese
+.\" Date: 2013年11月21日
+.\" SectDesc: Java IDLおよびRMI-IIOPツール
+.\" Software: JDK 8
+.\" Arch: 汎用
+.\" Part Number: E58103-01
+.\" Doc ID: JSSON
+.\"
+.if n .pl 99999
+.TH "tnameserv" "1" "2013年11月21日" "JDK 8" "Java IDLおよびRMI-IIOPツール"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名前"
+tnameserv \- インタフェース定義言語(IDL)。
+.SH "概要"
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBtnameserve\fR \fB\-ORBInitialPort\fR [ \fInameserverport\fR ]
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+\-ORBInitialPort \fInameserverport\fR
+.RS 4
+ネーミング・サービスがORBの\fBresolve_initial_references\fRメソッドと\fBlist_initial_references\fRメソッドの実装に使用するブートストラップ・プロトコルをリスニングする初期ポートです。
+.RE
+.SH "説明"
+.PP
+Java IDLには、Object Request Broker Daemon (ORBD)が含まれます。ORBDは、ブートストラップ・サービス、一時ネーミング・サービス、永続ネーミング・サービスおよびサーバー・マネージャを含むデーモン・プロセスです。Java IDLのすべてのチュートリアルではORBDを使用していますが、一時ネーミング・サービスを使用する例では、\fBorbd\fRのかわりに\fBtnameserv\fRを使用できます。
+.PP
+orbd(1)http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/idl/jidlNaming\&.html
+にあるまたは「Naming Service」を参照してください。
+.PP
+CORBAのCOS (Common Object Services)ネーミング・サービスは、ファイル・システムがファイルに対してディレクトリ構造を提供しているのと同じように、オブジェクト参照に対してツリー構造のディレクトリを提供します。Java IDLの一時ネーム・サービスである\fBtnameserv\fRは、COSネーム・サービスの仕様を単純な形で実装したものです。
+.PP
+オブジェクト参照はネームスペースに名前で格納され、オブジェクト参照と名前のペアは、それぞれネーム・バインディングと呼ばれます。ネーム・バインディングはネーミング・コンテキストに組み込むことができます。ネーミング・コンテキストはネーム・バインディングであり、ファイル・システムのサブディレクトリと同じ編成機能を持ちます。すべてのバインディングは初期ネーミング・コンテキストの下に格納されます。初期ネーミング・コンテキストは、ネームスペースの唯一の永続バインディングです。Java IDLネーミング・サービス・プロセスを停止して再起動すると、残りのネームスペースは失われます。
+.PP
+アプレットまたはアプリケーションからCOSネーミング・サービスを使用するためには、そのORBがネーミング・サービスが動作しているホストのポートを知っているか、そのネーミング・サービスの初期ネーミング・コンテキスト文字列にアクセスできる必要があります。ネーム・サービスは、Java IDLのネーム・サービスでもその他のCOS準拠のネーム・サービスでもかまいません。
+.SS "ネーミング・サービスの起動"
+.PP
+Java IDLネーム・サービスは、ネーム・サービスを使用するアプリケーションまたはアプレットより前に起動しておく必要があります。Java IDL製品をインストールすると、Java IDLネーミング・サービスを起動するスクリプト(Oracle Solaris:
+\fBtnameserv\fR)または実行可能ファイル(Windows:
+\fBtnameserv\&.exe\fR)が作成されます。バックグラウンドで動作するように、ネーム・サービスを起動してください。
+.PP
+特に指定しない場合、Java IDLネーミング・サービスは、ORBの\fBresolve_initial_references\fRメソッドと\fBlist_initial_references methods\fRメソッドの実装に使用するブートストラップ・プロトコルに対してポート900でリスニングします。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBtnameserv \-ORBInitialPort nameserverport&\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+ネーム・サーバー・ポートを指定しない場合、デフォルトでポート900が使用されます。Oracle Solarisソフトウェアの実行時、1024より小さいポートでプロセスを開始する場合は、rootユーザーになる必要があります。このため、1024以上のポート番号を使用することをお薦めします。1050のように別のポートを指定し、ネーム・サービスをバックグラウンドで実行するには、Solaris、LinuxまたはOS Xコマンド・シェルで次のように入力します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBtnameserv \-ORBInitialPort 1050&\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+WindowsのMS\-DOSシステム・プロンプトでは、次のように入力します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBstart tnameserv \-ORBInitialPort 1050\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+ネーム・サーバーのクライアントには、新しいポート番号を知らせる必要があります。これを行うには、ORBオブジェクトの作成時に\fBorg\&.omg\&.CORBA\&.ORBInitialPort\fRプロパティに新しいポート番号を設定します。
+.SS "異なるホスト上でのサーバーとクライアントの実行"
+.PP
+Java IDLとRMI\-IIOPのほとんどのチュートリアルでは、ネーミング・サービス、サーバーおよびクライアントはすべて開発用のマシン上で実行されます。実際にデプロイメントする場合には、クライアントとサーバーを、ネーミング・サービスとは異なるホスト・マシン上で実行することが多くなります。
+.PP
+クライアントとサーバーがネーム・サービスを見つけるには、クライアントとサーバーが、ネーム・サービスが実行されているポートの番号とホストを認識している必要があります。そのためには、クライアントとサーバーのファイル内の\fBorg\&.omg\&.CORBA\&.ORBInitialPort\fRプロパティと\fBorg\&.omg\&.CORBA\&.ORBInitialHost\fRプロパティをネーム・サービスが実行されているポートの番号とマシンの名前に設定します。この例は、「Getting Started Using RMI\-IIOP」
+(http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/rmi\-iiop/rmiiiopexample\&.html)に示されています
+.PP
+コマンド行オプション\fB\-ORBInitialPort nameserverport#\fRと\fB\-ORBInitialHost nameserverhostname\fRを使用して、クライアントとサーバーに対してネーミング・サービスを探す場所を指定することもできます。コマンド行オプションを使用してこれを行う方法の1つの例は、http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/idl/tutorial/jidl2machines\&.htmlの「Java IDL: The Hello World Example on Two Machines」
+を参照してください
+.PP
+たとえば、一時ネーム・サービス\fBtnameserv\fRが、ホスト\fBnameserverhost\fRのポート1050上で実行されているとします。さらに、クライアントがホスト\fBclienthost\fR上で実行され、サーバーはホスト\fBserverhost\fR上で実行されているとします。
+.PP
+ホスト\fBnameserverhost\fR上で\fBtnameserv\fRを起動します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBtnameserv \-ORBInitialPort 1050\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+\fBserverhost\fR上でサーバーを起動します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBjava Server \-ORBInitialPort 1050 \-ORBInitialHost nameserverhost\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+
+\fBclienthost\fR上でクライアントを起動します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBjava Client \-ORBInitialPort 1050 \-ORBInitialHost nameserverhost\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.SS "ネーミング・サービスの停止"
+.PP
+Java IDLネーミング・サービスを停止するには、Solaris、LinuxまたはOS Xの場合は、\fBkill\fRなどのオペレーティング・システムのコマンドを使用し、Windowsの場合は、\fB[Ctrl]+[C]\fRキーを使用します。ネーミング・サービスを明示的に停止するまでは、呼出し待機状態が続きます。サービスを終了させると、Java IDLネーム・サービスに登録されている名前は失われます。
+.SH "オプション"
+.PP
+\-J\fIoption\fR
+.RS 4
+Java Virtual Machineに\fBoption\fRを渡します。\fBoption\fRには、Javaアプリケーション起動ツールのリファレンス・ページに記載されているオプションを1つ指定します。たとえば、\fB\-J\-Xms48m\fRと指定すると、スタートアップ・メモリーは48MBに設定されます。java(1)を参照してください。
+.RE
+.SH "例"
+.SS "ネームスペースへのオブジェクトの追加"
+.PP
+次の例では、ネームスペースに名前を追加する方法を示します。このサンプル・プログラムは、自己完結型の一時ネーム・サービス・クライアントで、次のような単純なツリーを作成するものです。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBInitial Naming Context\fR
+\fB plans\fR
+\fB Personal\fR
+\fB calendar\fR
+\fB schedule\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+この例で、\fBplans\fRはオブジェクト参照、\fBPersonal\fRは\fBcalendar\fRと\fBschedule\fRの2つのオブジェクト参照を含むネーミング・コンテキストです。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBimport java\&.util\&.Properties;\fR
+\fBimport org\&.omg\&.CORBA\&.*;\fR
+\fBimport org\&.omg\&.CosNaming\&.*;\fR
+\fB \fR
+\fBpublic class NameClient {\fR
+
+\fB public static void main(String args[]) {\fR
+
+\fB try {\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+ネーミング・サービスの起動で、\fBnameserver\fRはポート1050で起動されました。次のコードで、このポート番号をクライアント・システムに知らせます。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB Properties props = new Properties();\fR
+\fB props\&.put("org\&.omg\&.CORBA\&.ORBInitialPort", "1050");\fR
+\fB ORB orb = ORB\&.init(args, props);\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+次のコードでは、初期ネーミング・コンテキストを取得し、それを\fBctx\fRに代入します。2行目では、\fBctx\fRをダミーのオブジェクト参照\fBobjref\fRにコピーします。このobjrefには、あとで様々な名前を割り当ててネームスペースに追加します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB NamingContext ctx =\fR
+\fB NamingContextHelper\&.narrow(\fR
+\fB orb\&.resolve_initial_references("NameService"));\fR
+\fB NamingContext objref = ctx;\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+次のコードでは、\fBtext\fRタイプの名前\fBplans\fRを作成し、それをダミーのオブジェクト参照にバインドします。その後、\fBrebind\fRメソッドを使用して初期ネーミング・コンテキストの下に\fBplans\fRを追加しています。\fBrebind\fRメソッドを使用すれば、\fBbind\fRメソッドを使用した場合に発生する例外を発生させずに、このプログラムを何度も繰返し実行できます。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB NameComponent nc1 = new NameComponent("plans", "text");\fR
+\fB NameComponent[] name1 = {nc1};\fR
+\fB ctx\&.rebind(name1, objref);\fR
+\fB System\&.out\&.println("plans rebind successful!");\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+次のコードでは、\fBdirectory\fRタイプの\fBPersonal\fRというネーミング・コンテキストを作成します。その結果得られるオブジェクト参照\fBctx2\fRを\fBname\fRにバインドし、初期ネーミング・コンテキストに追加します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB NameComponent nc2 = new NameComponent("Personal", "directory");\fR
+\fB NameComponent[] name2 = {nc2};\fR
+\fB NamingContext ctx2 = ctx\&.bind_new_context(name2);\fR
+\fB System\&.out\&.println("new naming context added\&.\&.");\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+残りのコードでは、ダミーのオブジェクト参照を\fBschedule\fRと\fBcalendar\fRという名前でネーミング・コンテキスト\fBPersonal\fR(\fBctx2\fR)にバインドします。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB NameComponent nc3 = new NameComponent("schedule", "text");\fR
+\fB NameComponent[] name3 = {nc3};\fR
+\fB ctx2\&.rebind(name3, objref);\fR
+\fB System\&.out\&.println("schedule rebind successful!");\fR
+\fB \fR
+\fB NameComponent nc4 = new NameComponent("calender", "text");\fR
+\fB NameComponent[] name4 = {nc4};\fR
+\fB ctx2\&.rebind(name4, objref);\fR
+\fB System\&.out\&.println("calender rebind successful!");\fR
+\fB } catch (Exception e) {\fR
+\fB e\&.printStackTrace(System\&.err);\fR
+\fB }\fR
+\fB }\fR
+\fB}\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.SS "ネームスペースの参照"
+.PP
+次のサンプル・プログラムでは、ネームスペースをブラウズする方法を示します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBimport java\&.util\&.Properties;\fR
+\fBimport org\&.omg\&.CORBA\&.*;\fR
+\fBimport org\&.omg\&.CosNaming\&.*;\fR
+\fB \fR
+\fBpublic class NameClientList {\fR
+
+\fB public static void main(String args[]) {\fR
+
+\fB try {\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+ネーミング・サービスの起動で、\fBnameserver\fRはポート1050で起動されました。次のコードで、このポート番号をクライアント・システムに知らせます。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB Properties props = new Properties();\fR
+\fB props\&.put("org\&.omg\&.CORBA\&.ORBInitialPort", "1050");\fR
+\fB ORB orb = ORB\&.init(args, props);\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+次のコードでは、初期ネーミング・コンテキストを取得しています。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB NamingContext nc =\fR
+\fB NamingContextHelper\&.narrow(\fR
+\fB orb\&.resolve_initial_references("NameService"));\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+\fBlist\fRメソッドは、ネーミング・コンテキストのバインディングをリストします。この場合、最大1000個までのバインディングが初期ネーミング・コンテキストから\fBBindingListHolder\fRに返されます。残りのバインディングは、\fBBindingIteratorHolder\fRに返されます。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB BindingListHolder bl = new BindingListHolder();\fR
+\fB BindingIteratorHolder blIt= new BindingIteratorHolder();\fR
+\fB nc\&.list(1000, bl, blIt);\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+次のコードでは、返された\fBBindingListHolder\fRからバインディングの配列を取得します。バインディングがない場合は、プログラムが終了します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB Binding bindings[] = bl\&.value;\fR
+\fB if (bindings\&.length == 0) return;\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+残りのコードでは、バインディングに対してループ処理を行い、名前を出力します。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB for (int i=0; i < bindings\&.length; i++) {\fR
+\fB \fR
+\fB // get the object reference for each binding\fR
+\fB org\&.omg\&.CORBA\&.Object obj = nc\&.resolve(bindings[i]\&.binding_name);\fR
+\fB String objStr = orb\&.object_to_string(obj);\fR
+\fB int lastIx = bindings[i]\&.binding_name\&.length\-1;\fR
+\fB \fR
+\fB // check to see if this is a naming context\fR
+\fB if (bindings[i]\&.binding_type == BindingType\&.ncontext) {\fR
+\fB System\&.out\&.println("Context: " +\fR
+\fB bindings[i]\&.binding_name[lastIx]\&.id);\fR
+\fB } else {\fR
+\fB System\&.out\&.println("Object: " +\fR
+\fB bindings[i]\&.binding_name[lastIx]\&.id);\fR
+\fB }\fR
+\fB }\fR
+\fB } catch (Exception e) {\fR
+\fB e\&.printStackTrace(System\&.err)\fR
+\fB }\fR
+\fB }\fR
+\fB}\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.SH "関連項目"
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+orbd(1)
+.RE
+.br
+'pl 8.5i
+'bp
diff --git a/FCL/src/main/assets/java/man/ja_JP.UTF-8/man1/unpack200.1 b/FCL/src/main/assets/java/man/ja_JP.UTF-8/man1/unpack200.1
new file mode 100644
index 000000000..f35b5d469
--- /dev/null
+++ b/FCL/src/main/assets/java/man/ja_JP.UTF-8/man1/unpack200.1
@@ -0,0 +1,205 @@
+'\" t
+.\" Copyright (c) 2004, 2014, Oracle and/or its affiliates. All rights reserved.
+.\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+.\"
+.\" This code is free software; you can redistribute it and/or modify it
+.\" under the terms of the GNU General Public License version 2 only, as
+.\" published by the Free Software Foundation.
+.\"
+.\" This code 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
+.\" version 2 for more details (a copy is included in the LICENSE file that
+.\" accompanied this code).
+.\"
+.\" You should have received a copy of the GNU General Public License version
+.\" 2 along with this work; if not, write to the Free Software Foundation,
+.\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+.\"
+.\" Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+.\" or visit www.oracle.com if you need additional information or have any
+.\" questions.
+.\"
+.\" Title: unpack200
+.\" Language: Japanese
+.\" Date: 2013年11月21日
+.\" SectDesc: Javaデプロイメント・ツール
+.\" Software: JDK 8
+.\" Arch: 汎用
+.\" Part Number: E58103-01
+.\" Doc ID: JSSON
+.\"
+.if n .pl 99999
+.TH "unpack200" "1" "2013年11月21日" "JDK 8" "Javaデプロイメント・ツール"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名前"
+unpack200 \- \fBpack200\fR(1)で作成されたパック・ファイルを、WebデプロイメントのためにJARファイルに変換します。
+.SH "概要"
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBunpack200\fR [ \fIoptions\fR ] input\-file \fIJAR\-file\fR
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+\fIoptions\fR
+.RS 4
+コマンド行オプション。オプションを参照してください。
+.RE
+.PP
+\fIinput\-file\fR
+.RS 4
+入力ファイルの名前。pack200 gzipファイルかpack200ファイルを指定できます。入力ファイルには、\fBpack200\fR(1)で作成されたJARファイルを指定することもできます(手間は\fB0\fRです)。この場合、入力ファイルの内容はPack2000マーカーで出力JARファイルにコピーされます。
+.RE
+.PP
+\fIJAR\-file\fR
+.RS 4
+出力JARファイル名。
+.RE
+.SH "説明"
+.PP
+\fBunpack200\fRコマンドは、\fBpack200\fR\fB(1)\fRで作成されたパック・ファイルをJARファイルに変換するネイティブ実装です。一般的な使用方法は次のとおりです。次の例では、デフォルトの\fBunpack200\fRコマンド設定で、\fBmyarchive\&.jar\fRファイルが\fBmyarchive\&.pack\&.gz\fRから作成されます。
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBunpack200 myarchive\&.pack\&.gz myarchive\&.jar\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.SH "オプション"
+.PP
+\-Hvalue \-\-deflate\-hint=\fIvalue\fR
+.RS 4
+JARファイル内のすべてのエントリに\fBtrue\fR、\fBfalse\fRまたは\fBkeep\fRのデフレーションを設定します。デフォルト・モードは\fBkeep\fRです。値が\fBtrue\fRまたは\fBfalse\fR場合、\fB\-\-deflate=hint\fRオプションはデフォルトの動作をオーバーライドして、出力JARファイル内のすべてのエントリのデフレーション・モードが設定されます。
+.RE
+.PP
+\-r \-\-remove\-pack\-file
+.RS 4
+入力パック・ファイルを削除します。
+.RE
+.PP
+\-v \-\-verbose
+.RS 4
+最小限のメッセージが表示されます。このオプションの複数の仕様には、より詳細なメッセージが表示されます。
+.RE
+.PP
+\-q \-\-quiet
+.RS 4
+メッセージを表示せずに動作するように指定します。
+.RE
+.PP
+\-lfilename \-\-log\-file=\fIfilename\fR
+.RS 4
+出力メッセージが記録されるログ・ファイルを指定します。
+.RE
+.PP
+\-? \-h \-\-help
+.RS 4
+\fBunpack200\fRコマンドに関するヘルプ情報を出力します。
+.RE
+.PP
+\-V \-\-version
+.RS 4
+\fBunpack200\fRコマンドに関するバージョン情報を出力します。
+.RE
+.PP
+\-J\fIoption\fR
+.RS 4
+Java Virtual Machineにoptionを渡します。\fBoption\fRには、Javaアプリケーション起動ツールのリファレンス・ページに記載されているオプションを1つ指定します。たとえば、\fB\-J\-Xms48m\fRと指定すると、スタートアップ・メモリーは48MBに設定されます。java(1)を参照してください。
+.RE
+.SH "注意"
+.PP
+このコマンドと\fBunpack\fRコマンドを混同しないでください。これらは別製品です。
+.PP
+JDKに付属するJava SE API仕様との相違が見つかった場合には、仕様を優先してください。
+.SH "終了ステータス"
+.PP
+次の終了値が返されます: 正常終了の場合は0、エラーが発生した場合は0より大きい値。
+.SH "関連項目"
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+pack200(1)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+jar(1)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+jarsigner(1)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+「Compression Formats for Network Deployment」
+
+http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/jweb/networking/compression_formats\&.html
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+「Java SE Technical Documentation」
+(http://docs\&.oracle\&.com/javase/)
+.RE
+.br
+'pl 8.5i
+'bp
diff --git a/FCL/src/main/assets/java/man/man1/java.1 b/FCL/src/main/assets/java/man/man1/java.1
new file mode 100644
index 000000000..4615bad50
--- /dev/null
+++ b/FCL/src/main/assets/java/man/man1/java.1
@@ -0,0 +1,3801 @@
+'\" t
+.\" Copyright (c) 1994, 2015, Oracle and/or its affiliates. All rights reserved.
+.\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+.\"
+.\" This code is free software; you can redistribute it and/or modify it
+.\" under the terms of the GNU General Public License version 2 only, as
+.\" published by the Free Software Foundation.
+.\"
+.\" This code 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
+.\" version 2 for more details (a copy is included in the LICENSE file that
+.\" accompanied this code).
+.\"
+.\" You should have received a copy of the GNU General Public License version
+.\" 2 along with this work; if not, write to the Free Software Foundation,
+.\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+.\"
+.\" Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+.\" or visit www.oracle.com if you need additional information or have any
+.\" questions.
+.\"
+.\" Title: java
+.\" Language: English
+.\" Date: 03 March 2015
+.\" SectDesc: Basic Tools
+.\" Software: JDK 8
+.\" Arch: generic
+.\" Part Number: E38207-04
+.\" Doc ID: JSSON
+.\"
+.if n .pl 99999
+.TH "java" "1" "03 March 2015" "JDK 8" "Basic Tools"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+java \- Launches a Java application\&.
+.SH "SYNOPSIS"
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBjava\fR [\fIoptions\fR] \fIclassname\fR [\fIargs\fR]
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBjava\fR [\fIoptions\fR] \fB\-jar\fR \fIfilename\fR [\fIargs\fR]
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+\fIoptions\fR
+.RS 4
+Command\-line options separated by spaces\&. See Options\&.
+.RE
+.PP
+\fIclassname\fR
+.RS 4
+The name of the class to be launched\&.
+.RE
+.PP
+\fIfilename\fR
+.RS 4
+The name of the Java Archive (JAR) file to be called\&. Used only with the
+\fB\-jar\fR
+option\&.
+.RE
+.PP
+\fIargs\fR
+.RS 4
+The arguments passed to the
+\fBmain()\fR
+method separated by spaces\&.
+.RE
+.SH "DESCRIPTION"
+.PP
+The
+\fBjava\fR
+command starts a Java application\&. It does this by starting the Java Runtime Environment (JRE), loading the specified class, and calling that class\*(Aqs
+\fBmain()\fR
+method\&. The method must be declared
+\fIpublic\fR
+and
+\fIstatic\fR, it must not return any value, and it must accept a
+\fBString\fR
+array as a parameter\&. The method declaration has the following form:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBpublic static void main(String[] args)\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+The
+\fBjava\fR
+command can be used to launch a JavaFX application by loading a class that either has a
+\fBmain()\fR
+method or that extends
+\fBjavafx\&.application\&.Application\fR\&. In the latter case, the launcher constructs an instance of the
+\fBApplication\fR
+class, calls its
+\fBinit()\fR
+method, and then calls the
+\fBstart(javafx\&.stage\&.Stage)\fR
+method\&.
+.PP
+By default, the first argument that is not an option of the
+\fBjava\fR
+command is the fully qualified name of the class to be called\&. If the
+\fB\-jar\fR
+option is specified, its argument is the name of the JAR file containing class and resource files for the application\&. The startup class must be indicated by the
+\fBMain\-Class\fR
+manifest header in its source code\&.
+.PP
+The JRE searches for the startup class (and other classes used by the application) in three sets of locations: the bootstrap class path, the installed extensions, and the user\(cqs class path\&.
+.PP
+Arguments after the class file name or the JAR file name are passed to the
+\fBmain()\fR
+method\&.
+.SH "OPTIONS"
+.PP
+The
+\fBjava\fR
+command supports a wide range of options that can be divided into the following categories:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Standard Options
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Non\-Standard Options
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Advanced Runtime Options
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Advanced JIT Compiler Options
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Advanced Serviceability Options
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Advanced Garbage Collection Options
+.RE
+.PP
+Standard options are guaranteed to be supported by all implementations of the Java Virtual Machine (JVM)\&. They are used for common actions, such as checking the version of the JRE, setting the class path, enabling verbose output, and so on\&.
+.PP
+Non\-standard options are general purpose options that are specific to the Java HotSpot Virtual Machine, so they are not guaranteed to be supported by all JVM implementations, and are subject to change\&. These options start with
+\fB\-X\fR\&.
+.PP
+Advanced options are not recommended for casual use\&. These are developer options used for tuning specific areas of the Java HotSpot Virtual Machine operation that often have specific system requirements and may require privileged access to system configuration parameters\&. They are also not guaranteed to be supported by all JVM implementations, and are subject to change\&. Advanced options start with
+\fB\-XX\fR\&.
+.PP
+To keep track of the options that were deprecated or removed in the latest release, there is a section named Deprecated and Removed Options at the end of the document\&.
+.PP
+Boolean options are used to either enable a feature that is disabled by default or disable a feature that is enabled by default\&. Such options do not require a parameter\&. Boolean
+\fB\-XX\fR
+options are enabled using the plus sign (\fB\-XX:+\fR\fIOptionName\fR) and disabled using the minus sign (\fB\-XX:\-\fR\fIOptionName\fR)\&.
+.PP
+For options that require an argument, the argument may be separated from the option name by a space, a colon (:), or an equal sign (=), or the argument may directly follow the option (the exact syntax differs for each option)\&. If you are expected to specify the size in bytes, you can use no suffix, or use the suffix
+\fBk\fR
+or
+\fBK\fR
+for kilobytes (KB),
+\fBm\fR
+or
+\fBM\fR
+for megabytes (MB),
+\fBg\fR
+or
+\fBG\fR
+for gigabytes (GB)\&. For example, to set the size to 8 GB, you can specify either
+\fB8g\fR,
+\fB8192m\fR,
+\fB8388608k\fR, or
+\fB8589934592\fR
+as the argument\&. If you are expected to specify the percentage, use a number from 0 to 1 (for example, specify
+\fB0\&.25\fR
+for 25%)\&.
+.SS "Standard Options"
+.PP
+These are the most commonly used options that are supported by all implementations of the JVM\&.
+.PP
+\-agentlib:\fIlibname\fR[=\fIoptions\fR]
+.RS 4
+Loads the specified native agent library\&. After the library name, a comma\-separated list of options specific to the library can be used\&.
+.sp
+If the option
+\fB\-agentlib:foo\fR
+is specified, then the JVM attempts to load the library named
+\fBlibfoo\&.so\fR
+in the location specified by the
+\fBLD_LIBRARY_PATH\fR
+system variable (on OS X this variable is
+\fBDYLD_LIBRARY_PATH\fR)\&.
+.sp
+The following example shows how to load the heap profiling tool (HPROF) library and get sample CPU information every 20 ms, with a stack depth of 3:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-agentlib:hprof=cpu=samples,interval=20,depth=3\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+The following example shows how to load the Java Debug Wire Protocol (JDWP) library and listen for the socket connection on port 8000, suspending the JVM before the main class loads:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-agentlib:jdwp=transport=dt_socket,server=y,address=8000\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+For more information about the native agent libraries, refer to the following:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+The
+\fBjava\&.lang\&.instrument\fR
+package description at http://docs\&.oracle\&.com/javase/8/docs/api/java/lang/instrument/package\-summary\&.html
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Agent Command Line Options in the JVM Tools Interface guide at http://docs\&.oracle\&.com/javase/8/docs/platform/jvmti/jvmti\&.html#starting
+.RE
+.RE
+.PP
+\-agentpath:\fIpathname\fR[=\fIoptions\fR]
+.RS 4
+Loads the native agent library specified by the absolute path name\&. This option is equivalent to
+\fB\-agentlib\fR
+but uses the full path and file name of the library\&.
+.RE
+.PP
+\-client
+.RS 4
+Selects the Java HotSpot Client VM\&. The 64\-bit version of the Java SE Development Kit (JDK) currently ignores this option and instead uses the Server JVM\&.
+.sp
+For default JVM selection, see Server\-Class Machine Detection at
+http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/server\-class\&.html
+.RE
+.PP
+\-D\fIproperty\fR=\fIvalue\fR
+.RS 4
+Sets a system property value\&. The
+\fIproperty\fR
+variable is a string with no spaces that represents the name of the property\&. The
+\fIvalue\fR
+variable is a string that represents the value of the property\&. If
+\fIvalue\fR
+is a string with spaces, then enclose it in quotation marks (for example
+\fB\-Dfoo="foo bar"\fR)\&.
+.RE
+.PP
+\-d32
+.RS 4
+Runs the application in a 32\-bit environment\&. If a 32\-bit environment is not installed or is not supported, then an error will be reported\&. By default, the application is run in a 32\-bit environment unless a 64\-bit system is used\&.
+.RE
+.PP
+\-d64
+.RS 4
+Runs the application in a 64\-bit environment\&. If a 64\-bit environment is not installed or is not supported, then an error will be reported\&. By default, the application is run in a 32\-bit environment unless a 64\-bit system is used\&.
+.sp
+Currently only the Java HotSpot Server VM supports 64\-bit operation, and the
+\fB\-server\fR
+option is implicit with the use of
+\fB\-d64\fR\&. The
+\fB\-client\fR
+option is ignored with the use of
+\fB\-d64\fR\&. This is subject to change in a future release\&.
+.RE
+.PP
+\-disableassertions[:[\fIpackagename\fR]\&.\&.\&.|:\fIclassname\fR]
+.br
+\-da[:[\fIpackagename\fR]\&.\&.\&.|:\fIclassname\fR]
+.RS 4
+Disables assertions\&. By default, assertions are disabled in all packages and classes\&.
+.sp
+With no arguments,
+\fB\-disableassertions\fR
+(\fB\-da\fR) disables assertions in all packages and classes\&. With the
+\fIpackagename\fR
+argument ending in
+\fB\&.\&.\&.\fR, the switch disables assertions in the specified package and any subpackages\&. If the argument is simply
+\fB\&.\&.\&.\fR, then the switch disables assertions in the unnamed package in the current working directory\&. With the
+\fIclassname\fR
+argument, the switch disables assertions in the specified class\&.
+.sp
+The
+\fB\-disableassertions\fR
+(\fB\-da\fR) option applies to all class loaders and to system classes (which do not have a class loader)\&. There is one exception to this rule: if the option is provided with no arguments, then it does not apply to system classes\&. This makes it easy to disable assertions in all classes except for system classes\&. The
+\fB\-disablesystemassertions\fR
+option enables you to disable assertions in all system classes\&.
+.sp
+To explicitly enable assertions in specific packages or classes, use the
+\fB\-enableassertions\fR
+(\fB\-ea\fR) option\&. Both options can be used at the same time\&. For example, to run the
+\fBMyClass\fR
+application with assertions enabled in package
+\fBcom\&.wombat\&.fruitbat\fR
+(and any subpackages) but disabled in class
+\fBcom\&.wombat\&.fruitbat\&.Brickbat\fR, use the following command:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBjava \-ea:com\&.wombat\&.fruitbat\&.\&.\&. \-da:com\&.wombat\&.fruitbat\&.Brickbat MyClass\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-disablesystemassertions
+.br
+\-dsa
+.RS 4
+Disables assertions in all system classes\&.
+.RE
+.PP
+\-enableassertions[:[\fIpackagename\fR]\&.\&.\&.|:\fIclassname\fR]
+.br
+\-ea[:[\fIpackagename\fR]\&.\&.\&.|:\fIclassname\fR]
+.RS 4
+Enables assertions\&. By default, assertions are disabled in all packages and classes\&.
+.sp
+With no arguments,
+\fB\-enableassertions\fR
+(\fB\-ea\fR) enables assertions in all packages and classes\&. With the
+\fIpackagename\fR
+argument ending in
+\fB\&.\&.\&.\fR, the switch enables assertions in the specified package and any subpackages\&. If the argument is simply
+\fB\&.\&.\&.\fR, then the switch enables assertions in the unnamed package in the current working directory\&. With the
+\fIclassname\fR
+argument, the switch enables assertions in the specified class\&.
+.sp
+The
+\fB\-enableassertions\fR
+(\fB\-ea\fR) option applies to all class loaders and to system classes (which do not have a class loader)\&. There is one exception to this rule: if the option is provided with no arguments, then it does not apply to system classes\&. This makes it easy to enable assertions in all classes except for system classes\&. The
+\fB\-enablesystemassertions\fR
+option provides a separate switch to enable assertions in all system classes\&.
+.sp
+To explicitly disable assertions in specific packages or classes, use the
+\fB\-disableassertions\fR
+(\fB\-da\fR) option\&. If a single command contains multiple instances of these switches, then they are processed in order before loading any classes\&. For example, to run the
+\fBMyClass\fR
+application with assertions enabled only in package
+\fBcom\&.wombat\&.fruitbat\fR
+(and any subpackages) but disabled in class
+\fBcom\&.wombat\&.fruitbat\&.Brickbat\fR, use the following command:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBjava \-ea:com\&.wombat\&.fruitbat\&.\&.\&. \-da:com\&.wombat\&.fruitbat\&.Brickbat MyClass\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-enablesystemassertions
+.br
+\-esa
+.RS 4
+Enables assertions in all system classes\&.
+.RE
+.PP
+\-help
+.br
+\-?
+.RS 4
+Displays usage information for the
+\fBjava\fR
+command without actually running the JVM\&.
+.RE
+.PP
+\-jar \fIfilename\fR
+.RS 4
+Executes a program encapsulated in a JAR file\&. The
+\fIfilename\fR
+argument is the name of a JAR file with a manifest that contains a line in the form
+\fBMain\-Class:\fR\fIclassname\fR
+that defines the class with the
+\fBpublic static void main(String[] args)\fR
+method that serves as your application\*(Aqs starting point\&.
+.sp
+When you use the
+\fB\-jar\fR
+option, the specified JAR file is the source of all user classes, and other class path settings are ignored\&.
+.sp
+For more information about JAR files, see the following resources:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+jar(1)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+The Java Archive (JAR) Files guide at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/jar/index\&.html
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Lesson: Packaging Programs in JAR Files at
+
+http://docs\&.oracle\&.com/javase/tutorial/deployment/jar/index\&.html
+.RE
+.RE
+.PP
+\-javaagent:\fIjarpath\fR[=\fIoptions\fR]
+.RS 4
+Loads the specified Java programming language agent\&. For more information about instrumenting Java applications, see the
+\fBjava\&.lang\&.instrument\fR
+package description in the Java API documentation at http://docs\&.oracle\&.com/javase/8/docs/api/java/lang/instrument/package\-summary\&.html
+.RE
+.PP
+\-jre\-restrict\-search
+.RS 4
+Includes user\-private JREs in the version search\&.
+.RE
+.PP
+\-no\-jre\-restrict\-search
+.RS 4
+Excludes user\-private JREs from the version search\&.
+.RE
+.PP
+\-server
+.RS 4
+Selects the Java HotSpot Server VM\&. The 64\-bit version of the JDK supports only the Server VM, so in that case the option is implicit\&.
+.sp
+For default JVM selection, see Server\-Class Machine Detection at
+http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/server\-class\&.html
+.RE
+.PP
+\-showversion
+.RS 4
+Displays version information and continues execution of the application\&. This option is equivalent to the
+\fB\-version\fR
+option except that the latter instructs the JVM to exit after displaying version information\&.
+.RE
+.PP
+\-splash:\fIimgname\fR
+.RS 4
+Shows the splash screen with the image specified by
+\fIimgname\fR\&. For example, to show the
+\fBsplash\&.gif\fR
+file from the
+\fBimages\fR
+directory when starting your application, use the following option:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-splash:images/splash\&.gif\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-verbose:class
+.RS 4
+Displays information about each loaded class\&.
+.RE
+.PP
+\-verbose:gc
+.RS 4
+Displays information about each garbage collection (GC) event\&.
+.RE
+.PP
+\-verbose:jni
+.RS 4
+Displays information about the use of native methods and other Java Native Interface (JNI) activity\&.
+.RE
+.PP
+\-version
+.RS 4
+Displays version information and then exits\&. This option is equivalent to the
+\fB\-showversion\fR
+option except that the latter does not instruct the JVM to exit after displaying version information\&.
+.RE
+.PP
+\-version:\fIrelease\fR
+.RS 4
+Specifies the release version to be used for running the application\&. If the version of the
+\fBjava\fR
+command called does not meet this specification and an appropriate implementation is found on the system, then the appropriate implementation will be used\&.
+.sp
+The
+\fIrelease\fR
+argument specifies either the exact version string, or a list of version strings and ranges separated by spaces\&. A
+\fIversion string\fR
+is the developer designation of the version number in the following form:
+\fB1\&.\fR\fIx\fR\fB\&.0_\fR\fIu\fR
+(where
+\fIx\fR
+is the major version number, and
+\fIu\fR
+is the update version number)\&. A
+\fIversion range\fR
+is made up of a version string followed by a plus sign (\fB+\fR) to designate this version or later, or a part of a version string followed by an asterisk (\fB*\fR) to designate any version string with a matching prefix\&. Version strings and ranges can be combined using a space for a logical
+\fIOR\fR
+combination, or an ampersand (\fB&\fR) for a logical
+\fIAND\fR
+combination of two version strings/ranges\&. For example, if running the class or JAR file requires either JRE 6u13 (1\&.6\&.0_13), or any JRE 6 starting from 6u10 (1\&.6\&.0_10), specify the following:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-version:"1\&.6\&.0_13 1\&.6* & 1\&.6\&.0_10+"\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+Quotation marks are necessary only if there are spaces in the
+\fIrelease\fR
+parameter\&.
+.sp
+For JAR files, the preference is to specify version requirements in the JAR file manifest rather than on the command line\&.
+.RE
+.SS "Non\-Standard Options"
+.PP
+These options are general purpose options that are specific to the Java HotSpot Virtual Machine\&.
+.PP
+\-X
+.RS 4
+Displays help for all available
+\fB\-X\fR
+options\&.
+.RE
+.PP
+\-Xbatch
+.RS 4
+Disables background compilation\&. By default, the JVM compiles the method as a background task, running the method in interpreter mode until the background compilation is finished\&. The
+\fB\-Xbatch\fR
+flag disables background compilation so that compilation of all methods proceeds as a foreground task until completed\&.
+.sp
+This option is equivalent to
+\fB\-XX:\-BackgroundCompilation\fR\&.
+.RE
+.PP
+\-Xbootclasspath:\fIpath\fR
+.RS 4
+Specifies a list of directories, JAR files, and ZIP archives separated by colons (:) to search for boot class files\&. These are used in place of the boot class files included in the JDK\&.
+.sp
+Do not deploy applications that use this option to override a class in
+\fBrt\&.jar\fR, because this violates the JRE binary code license\&.
+.RE
+.PP
+\-Xbootclasspath/a:\fIpath\fR
+.RS 4
+Specifies a list of directories, JAR files, and ZIP archives separated by colons (:) to append to the end of the default bootstrap class path\&.
+.sp
+Do not deploy applications that use this option to override a class in
+\fBrt\&.jar\fR, because this violates the JRE binary code license\&.
+.RE
+.PP
+\-Xbootclasspath/p:\fIpath\fR
+.RS 4
+Specifies a list of directories, JAR files, and ZIP archives separated by colons (:) to prepend to the front of the default bootstrap class path\&.
+.sp
+Do not deploy applications that use this option to override a class in
+\fBrt\&.jar\fR, because this violates the JRE binary code license\&.
+.RE
+.PP
+\-Xcheck:jni
+.RS 4
+Performs additional checks for Java Native Interface (JNI) functions\&. Specifically, it validates the parameters passed to the JNI function and the runtime environment data before processing the JNI request\&. Any invalid data encountered indicates a problem in the native code, and the JVM will terminate with an irrecoverable error in such cases\&. Expect a performance degradation when this option is used\&.
+.RE
+.PP
+\-Xcomp
+.RS 4
+Forces compilation of methods on first invocation\&. By default, the Client VM (\fB\-client\fR) performs 1,000 interpreted method invocations and the Server VM (\fB\-server\fR) performs 10,000 interpreted method invocations to gather information for efficient compilation\&. Specifying the
+\fB\-Xcomp\fR
+option disables interpreted method invocations to increase compilation performance at the expense of efficiency\&.
+.sp
+You can also change the number of interpreted method invocations before compilation using the
+\fB\-XX:CompileThreshold\fR
+option\&.
+.RE
+.PP
+\-Xdebug
+.RS 4
+Does nothing\&. Provided for backward compatibility\&.
+.RE
+.PP
+\-Xdiag
+.RS 4
+Shows additional diagnostic messages\&.
+.RE
+.PP
+\-Xfuture
+.RS 4
+Enables strict class\-file format checks that enforce close conformance to the class\-file format specification\&. Developers are encouraged to use this flag when developing new code because the stricter checks will become the default in future releases\&.
+.RE
+.PP
+\-Xint
+.RS 4
+Runs the application in interpreted\-only mode\&. Compilation to native code is disabled, and all bytecode is executed by the interpreter\&. The performance benefits offered by the just in time (JIT) compiler are not present in this mode\&.
+.RE
+.PP
+\-Xinternalversion
+.RS 4
+Displays more detailed JVM version information than the
+\fB\-version\fR
+option, and then exits\&.
+.RE
+.PP
+\-Xloggc:\fIfilename\fR
+.RS 4
+Sets the file to which verbose GC events information should be redirected for logging\&. The information written to this file is similar to the output of
+\fB\-verbose:gc\fR
+with the time elapsed since the first GC event preceding each logged event\&. The
+\fB\-Xloggc\fR
+option overrides
+\fB\-verbose:gc\fR
+if both are given with the same
+\fBjava\fR
+command\&.
+.sp
+Example:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-Xloggc:garbage\-collection\&.log\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-Xmaxjitcodesize=\fIsize\fR
+.RS 4
+Specifies the maximum code cache size (in bytes) for JIT\-compiled code\&. Append the letter
+\fBk\fR
+or
+\fBK\fR
+to indicate kilobytes,
+\fBm\fR
+or
+\fBM\fR
+to indicate megabytes,
+\fBg\fR
+or
+\fBG\fR
+to indicate gigabytes\&. The default maximum code cache size is 240 MB; if you disable tiered compilation with the option
+\fB\-XX:\-TieredCompilation\fR, then the default size is 48 MB:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-Xmaxjitcodesize=240m\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+This option is equivalent to
+\fB\-XX:ReservedCodeCacheSize\fR\&.
+.RE
+.PP
+\-Xmixed
+.RS 4
+Executes all bytecode by the interpreter except for hot methods, which are compiled to native code\&.
+.RE
+.PP
+\-Xmn\fIsize\fR
+.RS 4
+Sets the initial and maximum size (in bytes) of the heap for the young generation (nursery)\&. Append the letter
+\fBk\fR
+or
+\fBK\fR
+to indicate kilobytes,
+\fBm\fR
+or
+\fBM\fR
+to indicate megabytes,
+\fBg\fR
+or
+\fBG\fR
+to indicate gigabytes\&.
+.sp
+The young generation region of the heap is used for new objects\&. GC is performed in this region more often than in other regions\&. If the size for the young generation is too small, then a lot of minor garbage collections will be performed\&. If the size is too large, then only full garbage collections will be performed, which can take a long time to complete\&. Oracle recommends that you keep the size for the young generation between a half and a quarter of the overall heap size\&.
+.sp
+The following examples show how to set the initial and maximum size of young generation to 256 MB using various units:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-Xmn256m\fR
+\fB\-Xmn262144k\fR
+\fB\-Xmn268435456\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+Instead of the
+\fB\-Xmn\fR
+option to set both the initial and maximum size of the heap for the young generation, you can use
+\fB\-XX:NewSize\fR
+to set the initial size and
+\fB\-XX:MaxNewSize\fR
+to set the maximum size\&.
+.RE
+.PP
+\-Xms\fIsize\fR
+.RS 4
+Sets the initial size (in bytes) of the heap\&. This value must be a multiple of 1024 and greater than 1 MB\&. Append the letter
+\fBk\fR
+or
+\fBK\fR
+to indicate kilobytes,
+\fBm\fR
+or
+\fBM\fR
+to indicate megabytes,
+\fBg\fR
+or
+\fBG\fR
+to indicate gigabytes\&.
+.sp
+The following examples show how to set the size of allocated memory to 6 MB using various units:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-Xms6291456\fR
+\fB\-Xms6144k\fR
+\fB\-Xms6m\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+If you do not set this option, then the initial size will be set as the sum of the sizes allocated for the old generation and the young generation\&. The initial size of the heap for the young generation can be set using the
+\fB\-Xmn\fR
+option or the
+\fB\-XX:NewSize\fR
+option\&.
+.RE
+.PP
+\-Xmx\fIsize\fR
+.RS 4
+Specifies the maximum size (in bytes) of the memory allocation pool in bytes\&. This value must be a multiple of 1024 and greater than 2 MB\&. Append the letter
+\fBk\fR
+or
+\fBK\fR
+to indicate kilobytes,
+\fBm\fR
+or
+\fBM\fR
+to indicate megabytes,
+\fBg\fR
+or
+\fBG\fR
+to indicate gigabytes\&. The default value is chosen at runtime based on system configuration\&. For server deployments,
+\fB\-Xms\fR
+and
+\fB\-Xmx\fR
+are often set to the same value\&. See the section "Ergonomics" in
+\fIJava SE HotSpot Virtual Machine Garbage Collection Tuning Guide\fR
+at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/gctuning/index\&.html\&.
+.sp
+The following examples show how to set the maximum allowed size of allocated memory to 80 MB using various units:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-Xmx83886080\fR
+\fB\-Xmx81920k\fR
+\fB\-Xmx80m\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+The
+\fB\-Xmx\fR
+option is equivalent to
+\fB\-XX:MaxHeapSize\fR\&.
+.RE
+.PP
+\-Xnoclassgc
+.RS 4
+Disables garbage collection (GC) of classes\&. This can save some GC time, which shortens interruptions during the application run\&.
+.sp
+When you specify
+\fB\-Xnoclassgc\fR
+at startup, the class objects in the application will be left untouched during GC and will always be considered live\&. This can result in more memory being permanently occupied which, if not used carefully, will throw an out of memory exception\&.
+.RE
+.PP
+\-Xprof
+.RS 4
+Profiles the running program and sends profiling data to standard output\&. This option is provided as a utility that is useful in program development and is not intended to be used in production systems\&.
+.RE
+.PP
+\-Xrs
+.RS 4
+Reduces the use of operating system signals by the JVM\&.
+.sp
+Shutdown hooks enable orderly shutdown of a Java application by running user cleanup code (such as closing database connections) at shutdown, even if the JVM terminates abruptly\&.
+.sp
+The JVM catches signals to implement shutdown hooks for unexpected termination\&. The JVM uses
+\fBSIGHUP\fR,
+\fBSIGINT\fR, and
+\fBSIGTERM\fR
+to initiate the running of shutdown hooks\&.
+.sp
+The JVM uses a similar mechanism to implement the feature of dumping thread stacks for debugging purposes\&. The JVM uses
+\fBSIGQUIT\fR
+to perform thread dumps\&.
+.sp
+Applications embedding the JVM frequently need to trap signals such as
+\fBSIGINT\fR
+or
+\fBSIGTERM\fR, which can lead to interference with the JVM signal handlers\&. The
+\fB\-Xrs\fR
+option is available to address this issue\&. When
+\fB\-Xrs\fR
+is used, the signal masks for
+\fBSIGINT\fR,
+\fBSIGTERM\fR,
+\fBSIGHUP\fR, and
+\fBSIGQUIT\fR
+are not changed by the JVM, and signal handlers for these signals are not installed\&.
+.sp
+There are two consequences of specifying
+\fB\-Xrs\fR:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fBSIGQUIT\fR
+thread dumps are not available\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+User code is responsible for causing shutdown hooks to run, for example, by calling
+\fBSystem\&.exit()\fR
+when the JVM is to be terminated\&.
+.RE
+.RE
+.PP
+\-Xshare:\fImode\fR
+.RS 4
+Sets the class data sharing (CDS) mode\&. Possible
+\fImode\fR
+arguments for this option include the following:
+.PP
+auto
+.RS 4
+Use CDS if possible\&. This is the default value for Java HotSpot 32\-Bit Client VM\&.
+.RE
+.PP
+on
+.RS 4
+Require the use of CDS\&. Print an error message and exit if class data sharing cannot be used\&.
+.RE
+.PP
+off
+.RS 4
+Do not use CDS\&. This is the default value for Java HotSpot 32\-Bit Server VM, Java HotSpot 64\-Bit Client VM, and Java HotSpot 64\-Bit Server VM\&.
+.RE
+.PP
+dump
+.RS 4
+Manually generate the CDS archive\&. Specify the application class path as described in "Setting the Class Path "\&.
+.sp
+You should regenerate the CDS archive with each new JDK release\&.
+.RE
+.RE
+.PP
+\-XshowSettings:\fIcategory\fR
+.RS 4
+Shows settings and continues\&. Possible
+\fIcategory\fR
+arguments for this option include the following:
+.PP
+all
+.RS 4
+Shows all categories of settings\&. This is the default value\&.
+.RE
+.PP
+locale
+.RS 4
+Shows settings related to locale\&.
+.RE
+.PP
+properties
+.RS 4
+Shows settings related to system properties\&.
+.RE
+.PP
+vm
+.RS 4
+Shows the settings of the JVM\&.
+.RE
+.RE
+.PP
+\-Xss\fIsize\fR
+.RS 4
+Sets the thread stack size (in bytes)\&. Append the letter
+\fBk\fR
+or
+\fBK\fR
+to indicate KB,
+\fBm\fR
+or
+\fBM\fR
+to indicate MB,
+\fBg\fR
+or
+\fBG\fR
+to indicate GB\&. The default value depends on the platform:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Linux/ARM (32\-bit): 320 KB
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Linux/i386 (32\-bit): 320 KB
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Linux/x64 (64\-bit): 1024 KB
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+OS X (64\-bit): 1024 KB
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Oracle Solaris/i386 (32\-bit): 320 KB
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Oracle Solaris/x64 (64\-bit): 1024 KB
+.RE
+.sp
+The following examples set the thread stack size to 1024 KB in different units:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-Xss1m\fR
+\fB\-Xss1024k\fR
+\fB\-Xss1048576\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+This option is equivalent to
+\fB\-XX:ThreadStackSize\fR\&.
+.RE
+.PP
+\-Xusealtsigs
+.RS 4
+Use alternative signals instead of
+\fBSIGUSR1\fR
+and
+\fBSIGUSR2\fR
+for JVM internal signals\&. This option is equivalent to
+\fB\-XX:+UseAltSigs\fR\&.
+.RE
+.PP
+\-Xverify:\fImode\fR
+.RS 4
+Sets the mode of the bytecode verifier\&. Bytecode verification helps to troubleshoot some problems, but it also adds overhead to the running application\&. Possible
+\fImode\fR
+arguments for this option include the following:
+.PP
+none
+.RS 4
+Do not verify the bytecode\&. This reduces startup time and also reduces the protection provided by Java\&.
+.RE
+.PP
+remote
+.RS 4
+Verify those classes that are not loaded by the bootstrap class loader\&. This is the default behavior if you do not specify the
+\fB\-Xverify\fR
+option\&.
+.RE
+.PP
+all
+.RS 4
+Verify all classes\&.
+.RE
+.RE
+.SS "Advanced Runtime Options"
+.PP
+These options control the runtime behavior of the Java HotSpot VM\&.
+.PP
+\-XX:+CheckEndorsedAndExtDirs
+.RS 4
+Enables the option to prevent the
+\fBjava\fR
+command from running a Java application if it uses the endorsed\-standards override mechanism or the extension mechanism\&. This option checks if an application is using one of these mechanisms by checking the following:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+The
+\fBjava\&.ext\&.dirs\fR
+or
+\fBjava\&.endorsed\&.dirs\fR
+system property is set\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+The
+\fBlib/endorsed\fR
+directory exists and is not empty\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+The
+\fBlib/ext\fR
+directory contains any JAR files other than those of the JDK\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+The system\-wide platform\-specific extension directory contains any JAR files\&.
+.RE
+.RE
+.PP
+\-XX:+DisableAttachMechanism
+.RS 4
+Enables the option that disables the mechanism that lets tools attach to the JVM\&. By default, this option is disabled, meaning that the attach mechanism is enabled and you can use tools such as
+\fBjcmd\fR,
+\fBjstack\fR,
+\fBjmap\fR, and
+\fBjinfo\fR\&.
+.RE
+.PP
+\-XX:ErrorFile=\fIfilename\fR
+.RS 4
+Specifies the path and file name to which error data is written when an irrecoverable error occurs\&. By default, this file is created in the current working directory and named
+\fBhs_err_pid\fR\fIpid\fR\fB\&.log\fR
+where
+\fIpid\fR
+is the identifier of the process that caused the error\&. The following example shows how to set the default log file (note that the identifier of the process is specified as
+\fB%p\fR):
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:ErrorFile=\&./hs_err_pid%p\&.log\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+The following example shows how to set the error log to
+\fB/var/log/java/java_error\&.log\fR:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:ErrorFile=/var/log/java/java_error\&.log\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+If the file cannot be created in the specified directory (due to insufficient space, permission problem, or another issue), then the file is created in the temporary directory for the operating system\&. The temporary directory is
+\fB/tmp\fR\&.
+.RE
+.PP
+\-XX:+FailOverToOldVerifier
+.RS 4
+Enables automatic failover to the old verifier when the new type checker fails\&. By default, this option is disabled and it is ignored (that is, treated as disabled) for classes with a recent bytecode version\&. You can enable it for classes with older versions of the bytecode\&.
+.RE
+.PP
+\-XX:LargePageSizeInBytes=\fIsize\fR
+.RS 4
+On Solaris, sets the maximum size (in bytes) for large pages used for Java heap\&. The
+\fIsize\fR
+argument must be a power of 2 (2, 4, 8, 16, \&.\&.\&.)\&. Append the letter
+\fBk\fR
+or
+\fBK\fR
+to indicate kilobytes,
+\fBm\fR
+or
+\fBM\fR
+to indicate megabytes,
+\fBg\fR
+or
+\fBG\fR
+to indicate gigabytes\&. By default, the size is set to 0, meaning that the JVM chooses the size for large pages automatically\&.
+.sp
+The following example illustrates how to set the large page size to 4 megabytes (MB):
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:LargePageSizeInBytes=4m\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:MaxDirectMemorySize=\fIsize\fR
+.RS 4
+Sets the maximum total size (in bytes) of the New I/O (the
+\fBjava\&.nio\fR
+package) direct\-buffer allocations\&. Append the letter
+\fBk\fR
+or
+\fBK\fR
+to indicate kilobytes,
+\fBm\fR
+or
+\fBM\fR
+to indicate megabytes,
+\fBg\fR
+or
+\fBG\fR
+to indicate gigabytes\&. By default, the size is set to 0, meaning that the JVM chooses the size for NIO direct\-buffer allocations automatically\&.
+.sp
+The following examples illustrate how to set the NIO size to 1024 KB in different units:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:MaxDirectMemorySize=1m\fR
+\fB\-XX:MaxDirectMemorySize=1024k\fR
+\fB\-XX:MaxDirectMemorySize=1048576\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:NativeMemoryTracking=\fImode\fR
+.RS 4
+Specifies the mode for tracking JVM native memory usage\&. Possible
+\fImode\fR
+arguments for this option include the following:
+.PP
+off
+.RS 4
+Do not track JVM native memory usage\&. This is the default behavior if you do not specify the
+\fB\-XX:NativeMemoryTracking\fR
+option\&.
+.RE
+.PP
+summary
+.RS 4
+Only track memory usage by JVM subsystems, such as Java heap, class, code, and thread\&.
+.RE
+.PP
+detail
+.RS 4
+In addition to tracking memory usage by JVM subsystems, track memory usage by individual
+\fBCallSite\fR, individual virtual memory region and its committed regions\&.
+.RE
+.RE
+.PP
+\-XX:ObjectAlignmentInBytes=\fIalignment\fR
+.RS 4
+Sets the memory alignment of Java objects (in bytes)\&. By default, the value is set to 8 bytes\&. The specified value should be a power of two, and must be within the range of 8 and 256 (inclusive)\&. This option makes it possible to use compressed pointers with large Java heap sizes\&.
+.sp
+The heap size limit in bytes is calculated as:
+.sp
+\fB4GB * ObjectAlignmentInBytes\fR
+.sp
+Note: As the alignment value increases, the unused space between objects will also increase\&. As a result, you may not realize any benefits from using compressed pointers with large Java heap sizes\&.
+.RE
+.PP
+\-XX:OnError=\fIstring\fR
+.RS 4
+Sets a custom command or a series of semicolon\-separated commands to run when an irrecoverable error occurs\&. If the string contains spaces, then it must be enclosed in quotation marks\&.
+.sp
+The following example shows how the
+\fB\-XX:OnError\fR
+option can be used to run the
+\fBgcore\fR
+command to create the core image, and the debugger is started to attach to the process in case of an irrecoverable error (the
+\fB%p\fR
+designates the current process):
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:OnError="gcore %p;dbx \- %p"\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:OnOutOfMemoryError=\fIstring\fR
+.RS 4
+Sets a custom command or a series of semicolon\-separated commands to run when an
+\fBOutOfMemoryError\fR
+exception is first thrown\&. If the string contains spaces, then it must be enclosed in quotation marks\&. For an example of a command string, see the description of the
+\fB\-XX:OnError\fR
+option\&.
+.RE
+.PP
+\-XX:+PerfDataSaveToFile
+.RS 4
+If enabled, saves
+jstat(1) binary data when the Java application exits\&. This binary data is saved in a file named
+\fBhsperfdata_\fR\fI\fR, where
+\fI\fR
+is the process identifier of the Java application you ran\&. Use
+\fBjstat\fR
+to display the performance data contained in this file as follows:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBjstat \-class file:///\fR\fB\fI\fR\fR\fB/hsperfdata_\fR\fB\fI\fR\fR
+\fBjstat \-gc file:///\fR\fB\fI\fR\fR\fB/hsperfdata_\fR\fB\fI\fR\fR
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:+PrintCommandLineFlags
+.RS 4
+Enables printing of ergonomically selected JVM flags that appeared on the command line\&. It can be useful to know the ergonomic values set by the JVM, such as the heap space size and the selected garbage collector\&. By default, this option is disabled and flags are not printed\&.
+.RE
+.PP
+\-XX:+PrintNMTStatistics
+.RS 4
+Enables printing of collected native memory tracking data at JVM exit when native memory tracking is enabled (see
+\fB\-XX:NativeMemoryTracking\fR)\&. By default, this option is disabled and native memory tracking data is not printed\&.
+.RE
+.PP
+\-XX:+RelaxAccessControlCheck
+.RS 4
+Decreases the amount of access control checks in the verifier\&. By default, this option is disabled, and it is ignored (that is, treated as disabled) for classes with a recent bytecode version\&. You can enable it for classes with older versions of the bytecode\&.
+.RE
+.PP
+\-XX:+ShowMessageBoxOnError
+.RS 4
+Enables displaying of a dialog box when the JVM experiences an irrecoverable error\&. This prevents the JVM from exiting and keeps the process active so that you can attach a debugger to it to investigate the cause of the error\&. By default, this option is disabled\&.
+.RE
+.PP
+\-XX:ThreadStackSize=\fIsize\fR
+.RS 4
+Sets the thread stack size (in bytes)\&. Append the letter
+\fBk\fR
+or
+\fBK\fR
+to indicate kilobytes,
+\fBm\fR
+or
+\fBM\fR
+to indicate megabytes,
+\fBg\fR
+or
+\fBG\fR
+to indicate gigabytes\&. The default value depends on the platform:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Linux/ARM (32\-bit): 320 KB
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Linux/i386 (32\-bit): 320 KB
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Linux/x64 (64\-bit): 1024 KB
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+OS X (64\-bit): 1024 KB
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Oracle Solaris/i386 (32\-bit): 320 KB
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Oracle Solaris/x64 (64\-bit): 1024 KB
+.RE
+.sp
+The following examples show how to set the thread stack size to 1024 KB in different units:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:ThreadStackSize=1m\fR
+\fB\-XX:ThreadStackSize=1024k\fR
+\fB\-XX:ThreadStackSize=1048576\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+This option is equivalent to
+\fB\-Xss\fR\&.
+.RE
+.PP
+\-XX:+TraceClassLoading
+.RS 4
+Enables tracing of classes as they are loaded\&. By default, this option is disabled and classes are not traced\&.
+.RE
+.PP
+\-XX:+TraceClassLoadingPreorder
+.RS 4
+Enables tracing of all loaded classes in the order in which they are referenced\&. By default, this option is disabled and classes are not traced\&.
+.RE
+.PP
+\-XX:+TraceClassResolution
+.RS 4
+Enables tracing of constant pool resolutions\&. By default, this option is disabled and constant pool resolutions are not traced\&.
+.RE
+.PP
+\-XX:+TraceClassUnloading
+.RS 4
+Enables tracing of classes as they are unloaded\&. By default, this option is disabled and classes are not traced\&.
+.RE
+.PP
+\-XX:+TraceLoaderConstraints
+.RS 4
+Enables tracing of the loader constraints recording\&. By default, this option is disabled and loader constraints recording is not traced\&.
+.RE
+.PP
+\-XX:+UseAltSigs
+.RS 4
+Enables the use of alternative signals instead of
+\fBSIGUSR1\fR
+and
+\fBSIGUSR2\fR
+for JVM internal signals\&. By default, this option is disabled and alternative signals are not used\&. This option is equivalent to
+\fB\-Xusealtsigs\fR\&.
+.RE
+.PP
+\-XX:\-UseBiasedLocking
+.RS 4
+Disables the use of biased locking\&. Some applications with significant amounts of uncontended synchronization may attain significant speedups with this flag enabled, whereas applications with certain patterns of locking may see slowdowns\&. For more information about the biased locking technique, see the example in Java Tuning White Paper at http://www\&.oracle\&.com/technetwork/java/tuning\-139912\&.html#section4\&.2\&.5
+.sp
+By default, this option is enabled\&.
+.RE
+.PP
+\-XX:\-UseCompressedOops
+.RS 4
+Disables the use of compressed pointers\&. By default, this option is enabled, and compressed pointers are used when Java heap sizes are less than 32 GB\&. When this option is enabled, object references are represented as 32\-bit offsets instead of 64\-bit pointers, which typically increases performance when running the application with Java heap sizes less than 32 GB\&. This option works only for 64\-bit JVMs\&.
+.sp
+It is also possible to use compressed pointers when Java heap sizes are greater than 32GB\&. See the
+\fB\-XX:ObjectAlignmentInBytes\fR
+option\&.
+.RE
+.PP
+\-XX:+UseHugeTLBFS
+.RS 4
+This option for Linux is the equivalent of specifying
+\fB\-XX:+UseLargePages\fR\&. This option is disabled by default\&. This option pre\-allocates all large pages up\-front, when memory is reserved; consequently the JVM cannot dynamically grow or shrink large pages memory areas; see
+\fB\-XX:UseTransparentHugePages\fR
+if you want this behavior\&.
+.sp
+For more information, see "Large Pages"\&.
+.RE
+.PP
+\-XX:+UseLargePages
+.RS 4
+Enables the use of large page memory\&. By default, this option is disabled and large page memory is not used\&.
+.sp
+For more information, see "Large Pages"\&.
+.RE
+.PP
+\-XX:+UseMembar
+.RS 4
+Enables issuing of membars on thread state transitions\&. This option is disabled by default on all platforms except ARM servers, where it is enabled\&. (It is recommended that you do not disable this option on ARM servers\&.)
+.RE
+.PP
+\-XX:+UsePerfData
+.RS 4
+Enables the
+\fBperfdata\fR
+feature\&. This option is enabled by default to allow JVM monitoring and performance testing\&. Disabling it suppresses the creation of the
+\fBhsperfdata_userid\fR
+directories\&. To disable the
+\fBperfdata\fR
+feature, specify
+\fB\-XX:\-UsePerfData\fR\&.
+.RE
+.PP
+\-XX:+UseTransparentHugePages
+.RS 4
+On Linux, enables the use of large pages that can dynamically grow or shrink\&. This option is disabled by default\&. You may encounter performance problems with transparent huge pages as the OS moves other pages around to create huge pages; this option is made available for experimentation\&.
+.sp
+For more information, see "Large Pages"\&.
+.RE
+.PP
+\-XX:+AllowUserSignalHandlers
+.RS 4
+Enables installation of signal handlers by the application\&. By default, this option is disabled and the application is not allowed to install signal handlers\&.
+.RE
+.SS "Advanced JIT Compiler Options"
+.PP
+These options control the dynamic just\-in\-time (JIT) compilation performed by the Java HotSpot VM\&.
+.PP
+\-XX:+AggressiveOpts
+.RS 4
+Enables the use of aggressive performance optimization features, which are expected to become default in upcoming releases\&. By default, this option is disabled and experimental performance features are not used\&.
+.RE
+.PP
+\-XX:AllocateInstancePrefetchLines=\fIlines\fR
+.RS 4
+Sets the number of lines to prefetch ahead of the instance allocation pointer\&. By default, the number of lines to prefetch is set to 1:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:AllocateInstancePrefetchLines=1\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+Only the Java HotSpot Server VM supports this option\&.
+.RE
+.PP
+\-XX:AllocatePrefetchDistance=\fIsize\fR
+.RS 4
+Sets the size (in bytes) of the prefetch distance for object allocation\&. Memory about to be written with the value of new objects is prefetched up to this distance starting from the address of the last allocated object\&. Each Java thread has its own allocation point\&.
+.sp
+Negative values denote that prefetch distance is chosen based on the platform\&. Positive values are bytes to prefetch\&. Append the letter
+\fBk\fR
+or
+\fBK\fR
+to indicate kilobytes,
+\fBm\fR
+or
+\fBM\fR
+to indicate megabytes,
+\fBg\fR
+or
+\fBG\fR
+to indicate gigabytes\&. The default value is set to \-1\&.
+.sp
+The following example shows how to set the prefetch distance to 1024 bytes:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:AllocatePrefetchDistance=1024\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+Only the Java HotSpot Server VM supports this option\&.
+.RE
+.PP
+\-XX:AllocatePrefetchInstr=\fIinstruction\fR
+.RS 4
+Sets the prefetch instruction to prefetch ahead of the allocation pointer\&. Only the Java HotSpot Server VM supports this option\&. Possible values are from 0 to 3\&. The actual instructions behind the values depend on the platform\&. By default, the prefetch instruction is set to 0:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:AllocatePrefetchInstr=0\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+Only the Java HotSpot Server VM supports this option\&.
+.RE
+.PP
+\-XX:AllocatePrefetchLines=\fIlines\fR
+.RS 4
+Sets the number of cache lines to load after the last object allocation by using the prefetch instructions generated in compiled code\&. The default value is 1 if the last allocated object was an instance, and 3 if it was an array\&.
+.sp
+The following example shows how to set the number of loaded cache lines to 5:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:AllocatePrefetchLines=5\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+Only the Java HotSpot Server VM supports this option\&.
+.RE
+.PP
+\-XX:AllocatePrefetchStepSize=\fIsize\fR
+.RS 4
+Sets the step size (in bytes) for sequential prefetch instructions\&. Append the letter
+\fBk\fR
+or
+\fBK\fR
+to indicate kilobytes,
+\fBm\fR
+or
+\fBM\fR
+to indicate megabytes,
+\fBg\fR
+or
+\fBG\fR
+to indicate gigabytes\&. By default, the step size is set to 16 bytes:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:AllocatePrefetchStepSize=16\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+Only the Java HotSpot Server VM supports this option\&.
+.RE
+.PP
+\-XX:AllocatePrefetchStyle=\fIstyle\fR
+.RS 4
+Sets the generated code style for prefetch instructions\&. The
+\fIstyle\fR
+argument is an integer from 0 to 3:
+.PP
+0
+.RS 4
+Do not generate prefetch instructions\&.
+.RE
+.PP
+1
+.RS 4
+Execute prefetch instructions after each allocation\&. This is the default parameter\&.
+.RE
+.PP
+2
+.RS 4
+Use the thread\-local allocation block (TLAB) watermark pointer to determine when prefetch instructions are executed\&.
+.RE
+.PP
+3
+.RS 4
+Use BIS instruction on SPARC for allocation prefetch\&.
+.RE
+.sp
+Only the Java HotSpot Server VM supports this option\&.
+.RE
+.PP
+\-XX:+BackgroundCompilation
+.RS 4
+Enables background compilation\&. This option is enabled by default\&. To disable background compilation, specify
+\fB\-XX:\-BackgroundCompilation\fR
+(this is equivalent to specifying
+\fB\-Xbatch\fR)\&.
+.RE
+.PP
+\-XX:CICompilerCount=\fIthreads\fR
+.RS 4
+Sets the number of compiler threads to use for compilation\&. By default, the number of threads is set to 2 for the server JVM, to 1 for the client JVM, and it scales to the number of cores if tiered compilation is used\&. The following example shows how to set the number of threads to 2:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:CICompilerCount=2\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:CodeCacheMinimumFreeSpace=\fIsize\fR
+.RS 4
+Sets the minimum free space (in bytes) required for compilation\&. Append the letter
+\fBk\fR
+or
+\fBK\fR
+to indicate kilobytes,
+\fBm\fR
+or
+\fBM\fR
+to indicate megabytes,
+\fBg\fR
+or
+\fBG\fR
+to indicate gigabytes\&. When less than the minimum free space remains, compiling stops\&. By default, this option is set to 500 KB\&. The following example shows how to set the minimum free space to 1024 MB:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:CodeCacheMinimumFreeSpace=1024m\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:CompileCommand=\fIcommand\fR,\fImethod\fR[,\fIoption\fR]
+.RS 4
+Specifies a command to perform on a method\&. For example, to exclude the
+\fBindexOf()\fR
+method of the
+\fBString\fR
+class from being compiled, use the following:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:CompileCommand=exclude,java/lang/String\&.indexOf\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+Note that the full class name is specified, including all packages and subpackages separated by a slash (\fB/\fR)\&. For easier cut and paste operations, it is also possible to use the method name format produced by the
+\fB\-XX:+PrintCompilation\fR
+and
+\fB\-XX:+LogCompilation\fR
+options:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:CompileCommand=exclude,java\&.lang\&.String::indexOf\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+If the method is specified without the signature, the command will be applied to all methods with the specified name\&. However, you can also specify the signature of the method in the class file format\&. In this case, you should enclose the arguments in quotation marks, because otherwise the shell treats the semicolon as command end\&. For example, if you want to exclude only the
+\fBindexOf(String)\fR
+method of the
+\fBString\fR
+class from being compiled, use the following:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:CompileCommand="exclude,java/lang/String\&.indexOf,(Ljava/lang/String;)I"\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+You can also use the asterisk (*) as a wildcard for class and method names\&. For example, to exclude all
+\fBindexOf()\fR
+methods in all classes from being compiled, use the following:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:CompileCommand=exclude,*\&.indexOf\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+The commas and periods are aliases for spaces, making it easier to pass compiler commands through a shell\&. You can pass arguments to
+\fB\-XX:CompileCommand\fR
+using spaces as separators by enclosing the argument in quotation marks:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:CompileCommand="exclude java/lang/String indexOf"\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+Note that after parsing the commands passed on the command line using the
+\fB\-XX:CompileCommand\fR
+options, the JIT compiler then reads commands from the
+\fB\&.hotspot_compiler\fR
+file\&. You can add commands to this file or specify a different file using the
+\fB\-XX:CompileCommandFile\fR
+option\&.
+.sp
+To add several commands, either specify the
+\fB\-XX:CompileCommand\fR
+option multiple times, or separate each argument with the newline separator (\fB\en\fR)\&. The following commands are available:
+.PP
+break
+.RS 4
+Set a breakpoint when debugging the JVM to stop at the beginning of compilation of the specified method\&.
+.RE
+.PP
+compileonly
+.RS 4
+Exclude all methods from compilation except for the specified method\&. As an alternative, you can use the
+\fB\-XX:CompileOnly\fR
+option, which allows to specify several methods\&.
+.RE
+.PP
+dontinline
+.RS 4
+Prevent inlining of the specified method\&.
+.RE
+.PP
+exclude
+.RS 4
+Exclude the specified method from compilation\&.
+.RE
+.PP
+help
+.RS 4
+Print a help message for the
+\fB\-XX:CompileCommand\fR
+option\&.
+.RE
+.PP
+inline
+.RS 4
+Attempt to inline the specified method\&.
+.RE
+.PP
+log
+.RS 4
+Exclude compilation logging (with the
+\fB\-XX:+LogCompilation\fR
+option) for all methods except for the specified method\&. By default, logging is performed for all compiled methods\&.
+.RE
+.PP
+option
+.RS 4
+This command can be used to pass a JIT compilation option to the specified method in place of the last argument (\fIoption\fR)\&. The compilation option is set at the end, after the method name\&. For example, to enable the
+\fBBlockLayoutByFrequency\fR
+option for the
+\fBappend()\fR
+method of the
+\fBStringBuffer\fR
+class, use the following:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:CompileCommand=option,java/lang/StringBuffer\&.append,BlockLayoutByFrequency\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+You can specify multiple compilation options, separated by commas or spaces\&.
+.RE
+.PP
+print
+.RS 4
+Print generated assembler code after compilation of the specified method\&.
+.RE
+.PP
+quiet
+.RS 4
+Do not print the compile commands\&. By default, the commands that you specify with the \-\fBXX:CompileCommand\fR
+option are printed; for example, if you exclude from compilation the
+\fBindexOf()\fR
+method of the
+\fBString\fR
+class, then the following will be printed to standard output:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBCompilerOracle: exclude java/lang/String\&.indexOf\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+You can suppress this by specifying the
+\fB\-XX:CompileCommand=quiet\fR
+option before other
+\fB\-XX:CompileCommand\fR
+options\&.
+.RE
+.RE
+.PP
+\-XX:CompileCommandFile=\fIfilename\fR
+.RS 4
+Sets the file from which JIT compiler commands are read\&. By default, the
+\fB\&.hotspot_compiler\fR
+file is used to store commands performed by the JIT compiler\&.
+.sp
+Each line in the command file represents a command, a class name, and a method name for which the command is used\&. For example, this line prints assembly code for the
+\fBtoString()\fR
+method of the
+\fBString\fR
+class:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBprint java/lang/String toString\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+For more information about specifying the commands for the JIT compiler to perform on methods, see the
+\fB\-XX:CompileCommand\fR
+option\&.
+.RE
+.PP
+\-XX:CompileOnly=\fImethods\fR
+.RS 4
+Sets the list of methods (separated by commas) to which compilation should be restricted\&. Only the specified methods will be compiled\&. Specify each method with the full class name (including the packages and subpackages)\&. For example, to compile only the
+\fBlength()\fR
+method of the
+\fBString\fR
+class and the
+\fBsize()\fR
+method of the
+\fBList\fR
+class, use the following:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:CompileOnly=java/lang/String\&.length,java/util/List\&.size\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+Note that the full class name is specified, including all packages and subpackages separated by a slash (\fB/\fR)\&. For easier cut and paste operations, it is also possible to use the method name format produced by the
+\fB\-XX:+PrintCompilation\fR
+and
+\fB\-XX:+LogCompilation\fR
+options:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:CompileOnly=java\&.lang\&.String::length,java\&.util\&.List::size\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+Although wildcards are not supported, you can specify only the class or package name to compile all methods in that class or package, as well as specify just the method to compile methods with this name in any class:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:CompileOnly=java/lang/String\fR
+\fB\-XX:CompileOnly=java/lang\fR
+\fB\-XX:CompileOnly=\&.length\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:CompileThreshold=\fIinvocations\fR
+.RS 4
+Sets the number of interpreted method invocations before compilation\&. By default, in the server JVM, the JIT compiler performs 10,000 interpreted method invocations to gather information for efficient compilation\&. For the client JVM, the default setting is 1,500 invocations\&. This option is ignored when tiered compilation is enabled; see the option
+\fB\-XX:+TieredCompilation\fR\&. The following example shows how to set the number of interpreted method invocations to 5,000:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:CompileThreshold=5000\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+You can completely disable interpretation of Java methods before compilation by specifying the
+\fB\-Xcomp\fR
+option\&.
+.RE
+.PP
+\-XX:+DoEscapeAnalysis
+.RS 4
+Enables the use of escape analysis\&. This option is enabled by default\&. To disable the use of escape analysis, specify
+\fB\-XX:\-DoEscapeAnalysis\fR\&. Only the Java HotSpot Server VM supports this option\&.
+.RE
+.PP
+\-XX:InitialCodeCacheSize=\fIsize\fR
+.RS 4
+Sets the initial code cache size (in bytes)\&. Append the letter
+\fBk\fR
+or
+\fBK\fR
+to indicate kilobytes,
+\fBm\fR
+or
+\fBM\fR
+to indicate megabytes,
+\fBg\fR
+or
+\fBG\fR
+to indicate gigabytes\&. The default value is set to 500 KB\&. The initial code cache size should be not less than the system\*(Aqs minimal memory page size\&. The following example shows how to set the initial code cache size to 32 KB:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:InitialCodeCacheSize=32k\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:+Inline
+.RS 4
+Enables method inlining\&. This option is enabled by default to increase performance\&. To disable method inlining, specify
+\fB\-XX:\-Inline\fR\&.
+.RE
+.PP
+\-XX:InlineSmallCode=\fIsize\fR
+.RS 4
+Sets the maximum code size (in bytes) for compiled methods that should be inlined\&. Append the letter
+\fBk\fR
+or
+\fBK\fR
+to indicate kilobytes,
+\fBm\fR
+or
+\fBM\fR
+to indicate megabytes,
+\fBg\fR
+or
+\fBG\fR
+to indicate gigabytes\&. Only compiled methods with the size smaller than the specified size will be inlined\&. By default, the maximum code size is set to 1000 bytes:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:InlineSmallCode=1000\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:+LogCompilation
+.RS 4
+Enables logging of compilation activity to a file named
+\fBhotspot\&.log\fR
+in the current working directory\&. You can specify a different log file path and name using the
+\fB\-XX:LogFile\fR
+option\&.
+.sp
+By default, this option is disabled and compilation activity is not logged\&. The
+\fB\-XX:+LogCompilation\fR
+option has to be used together with the
+\fB\-XX:UnlockDiagnosticVMOptions\fR
+option that unlocks diagnostic JVM options\&.
+.sp
+You can enable verbose diagnostic output with a message printed to the console every time a method is compiled by using the
+\fB\-XX:+PrintCompilation\fR
+option\&.
+.RE
+.PP
+\-XX:MaxInlineSize=\fIsize\fR
+.RS 4
+Sets the maximum bytecode size (in bytes) of a method to be inlined\&. Append the letter
+\fBk\fR
+or
+\fBK\fR
+to indicate kilobytes,
+\fBm\fR
+or
+\fBM\fR
+to indicate megabytes,
+\fBg\fR
+or
+\fBG\fR
+to indicate gigabytes\&. By default, the maximum bytecode size is set to 35 bytes:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:MaxInlineSize=35\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:MaxNodeLimit=\fInodes\fR
+.RS 4
+Sets the maximum number of nodes to be used during single method compilation\&. By default, the maximum number of nodes is set to 65,000:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:MaxNodeLimit=65000\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:MaxTrivialSize=\fIsize\fR
+.RS 4
+Sets the maximum bytecode size (in bytes) of a trivial method to be inlined\&. Append the letter
+\fBk\fR
+or
+\fBK\fR
+to indicate kilobytes,
+\fBm\fR
+or
+\fBM\fR
+to indicate megabytes,
+\fBg\fR
+or
+\fBG\fR
+to indicate gigabytes\&. By default, the maximum bytecode size of a trivial method is set to 6 bytes:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:MaxTrivialSize=6\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:+OptimizeStringConcat
+.RS 4
+Enables the optimization of
+\fBString\fR
+concatenation operations\&. This option is enabled by default\&. To disable the optimization of
+\fBString\fR
+concatenation operations, specify
+\fB\-XX:\-OptimizeStringConcat\fR\&. Only the Java HotSpot Server VM supports this option\&.
+.RE
+.PP
+\-XX:+PrintAssembly
+.RS 4
+Enables printing of assembly code for bytecoded and native methods by using the external
+\fBdisassembler\&.so\fR
+library\&. This enables you to see the generated code, which may help you to diagnose performance issues\&.
+.sp
+By default, this option is disabled and assembly code is not printed\&. The
+\fB\-XX:+PrintAssembly\fR
+option has to be used together with the
+\fB\-XX:UnlockDiagnosticVMOptions\fR
+option that unlocks diagnostic JVM options\&.
+.RE
+.PP
+\-XX:+PrintCompilation
+.RS 4
+Enables verbose diagnostic output from the JVM by printing a message to the console every time a method is compiled\&. This enables you to see which methods actually get compiled\&. By default, this option is disabled and diagnostic output is not printed\&.
+.sp
+You can also log compilation activity to a file by using the
+\fB\-XX:+LogCompilation\fR
+option\&.
+.RE
+.PP
+\-XX:+PrintInlining
+.RS 4
+Enables printing of inlining decisions\&. This enables you to see which methods are getting inlined\&.
+.sp
+By default, this option is disabled and inlining information is not printed\&. The
+\fB\-XX:+PrintInlining\fR
+option has to be used together with the
+\fB\-XX:+UnlockDiagnosticVMOptions\fR
+option that unlocks diagnostic JVM options\&.
+.RE
+.PP
+\-XX:ReservedCodeCacheSize=\fIsize\fR
+.RS 4
+Sets the maximum code cache size (in bytes) for JIT\-compiled code\&. Append the letter
+\fBk\fR
+or
+\fBK\fR
+to indicate kilobytes,
+\fBm\fR
+or
+\fBM\fR
+to indicate megabytes,
+\fBg\fR
+or
+\fBG\fR
+to indicate gigabytes\&. The default maximum code cache size is 240 MB; if you disable tiered compilation with the option
+\fB\-XX:\-TieredCompilation\fR, then the default size is 48 MB\&. This option has a limit of 2 GB; otherwise, an error is generated\&. The maximum code cache size should not be less than the initial code cache size; see the option
+\fB\-XX:InitialCodeCacheSize\fR\&. This option is equivalent to
+\fB\-Xmaxjitcodesize\fR\&.
+.RE
+.PP
+\-XX:RTMAbortRatio=\fIabort_ratio\fR
+.RS 4
+The RTM abort ratio is specified as a percentage (%) of all executed RTM transactions\&. If a number of aborted transactions becomes greater than this ratio, then the compiled code will be deoptimized\&. This ratio is used when the
+\fB\-XX:+UseRTMDeopt\fR
+option is enabled\&. The default value of this option is 50\&. This means that the compiled code will be deoptimized if 50% of all transactions are aborted\&.
+.RE
+.PP
+\-XX:RTMRetryCount=\fInumber_of_retries\fR
+.RS 4
+RTM locking code will be retried, when it is aborted or busy, the number of times specified by this option before falling back to the normal locking mechanism\&. The default value for this option is 5\&. The
+\fB\-XX:UseRTMLocking\fR
+option must be enabled\&.
+.RE
+.PP
+\-XX:\-TieredCompilation
+.RS 4
+Disables the use of tiered compilation\&. By default, this option is enabled\&. Only the Java HotSpot Server VM supports this option\&.
+.RE
+.PP
+\-XX:+UseAES
+.RS 4
+Enables hardware\-based AES intrinsics for Intel, AMD, and SPARC hardware\&. Intel Westmere (2010 and newer), AMD Bulldozer (2011 and newer), and SPARC (T4 and newer) are the supported hardware\&. UseAES is used in conjunction with UseAESIntrinsics\&.
+.RE
+.PP
+\-XX:+UseAESIntrinsics
+.RS 4
+UseAES and UseAESIntrinsics flags are enabled by default and are supported only for Java HotSpot Server VM 32\-bit and 64\-bit\&. To disable hardware\-based AES intrinsics, specify
+\fB\-XX:\-UseAES \-XX:\-UseAESIntrinsics\fR\&. For example, to enable hardware AES, use the following flags:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:+UseAES \-XX:+UseAESIntrinsics\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+To support UseAES and UseAESIntrinsics flags for 32\-bit and 64\-bit use
+\fB\-server\fR
+option to choose Java HotSpot Server VM\&. These flags are not supported on Client VM\&.
+.RE
+.PP
+\-XX:+UseCodeCacheFlushing
+.RS 4
+Enables flushing of the code cache before shutting down the compiler\&. This option is enabled by default\&. To disable flushing of the code cache before shutting down the compiler, specify
+\fB\-XX:\-UseCodeCacheFlushing\fR\&.
+.RE
+.PP
+\-XX:+UseCondCardMark
+.RS 4
+Enables checking of whether the card is already marked before updating the card table\&. This option is disabled by default and should only be used on machines with multiple sockets, where it will increase performance of Java applications that rely heavily on concurrent operations\&. Only the Java HotSpot Server VM supports this option\&.
+.RE
+.PP
+\-XX:+UseRTMDeopt
+.RS 4
+Auto\-tunes RTM locking depending on the abort ratio\&. This ratio is specified by
+\fB\-XX:RTMAbortRatio\fR
+option\&. If the number of aborted transactions exceeds the abort ratio, then the method containing the lock will be deoptimized and recompiled with all locks as normal locks\&. This option is disabled by default\&. The
+\fB\-XX:+UseRTMLocking\fR
+option must be enabled\&.
+.RE
+.PP
+\-XX:+UseRTMLocking
+.RS 4
+Generate Restricted Transactional Memory (RTM) locking code for all inflated locks, with the normal locking mechanism as the fallback handler\&. This option is disabled by default\&. Options related to RTM are only available for the Java HotSpot Server VM on x86 CPUs that support Transactional Synchronization Extensions (TSX)\&.
+.sp
+RTM is part of Intel\*(Aqs TSX, which is an x86 instruction set extension and facilitates the creation of multithreaded applications\&. RTM introduces the new instructions
+\fBXBEGIN\fR,
+\fBXABORT\fR,
+\fBXEND\fR, and
+\fBXTEST\fR\&. The
+\fBXBEGIN\fR
+and
+\fBXEND\fR
+instructions enclose a set of instructions to run as a transaction\&. If no conflict is found when running the transaction, the memory and register modifications are committed together at the
+\fBXEND\fR
+instruction\&. The
+\fBXABORT\fR
+instruction can be used to explicitly abort a transaction and the
+\fBXEND\fR
+instruction to check if a set of instructions are being run in a transaction\&.
+.sp
+A lock on a transaction is inflated when another thread tries to access the same transaction, thereby blocking the thread that did not originally request access to the transaction\&. RTM requires that a fallback set of operations be specified in case a transaction aborts or fails\&. An RTM lock is a lock that has been delegated to the TSX\*(Aqs system\&.
+.sp
+RTM improves performance for highly contended locks with low conflict in a critical region (which is code that must not be accessed by more than one thread concurrently)\&. RTM also improves the performance of coarse\-grain locking, which typically does not perform well in multithreaded applications\&. (Coarse\-grain locking is the strategy of holding locks for long periods to minimize the overhead of taking and releasing locks, while fine\-grained locking is the strategy of trying to achieve maximum parallelism by locking only when necessary and unlocking as soon as possible\&.) Also, for lightly contended locks that are used by different threads, RTM can reduce false cache line sharing, also known as cache line ping\-pong\&. This occurs when multiple threads from different processors are accessing different resources, but the resources share the same cache line\&. As a result, the processors repeatedly invalidate the cache lines of other processors, which forces them to read from main memory instead of their cache\&.
+.RE
+.PP
+\-XX:+UseSHA
+.RS 4
+Enables hardware\-based intrinsics for SHA crypto hash functions for SPARC hardware\&.
+\fBUseSHA\fR
+is used in conjunction with the
+\fBUseSHA1Intrinsics\fR,
+\fBUseSHA256Intrinsics\fR, and
+\fBUseSHA512Intrinsics\fR
+options\&.
+.sp
+The
+\fBUseSHA\fR
+and
+\fBUseSHA*Intrinsics\fR
+flags are enabled by default, and are supported only for Java HotSpot Server VM 64\-bit on SPARC T4 and newer\&.
+.sp
+This feature is only applicable when using the
+\fBsun\&.security\&.provider\&.Sun\fR
+provider for SHA operations\&.
+.sp
+To disable all hardware\-based SHA intrinsics, specify
+\fB\-XX:\-UseSHA\fR\&. To disable only a particular SHA intrinsic, use the appropriate corresponding option\&. For example:
+\fB\-XX:\-UseSHA256Intrinsics\fR\&.
+.RE
+.PP
+\-XX:+UseSHA1Intrinsics
+.RS 4
+Enables intrinsics for SHA\-1 crypto hash function\&.
+.RE
+.PP
+\-XX:+UseSHA256Intrinsics
+.RS 4
+Enables intrinsics for SHA\-224 and SHA\-256 crypto hash functions\&.
+.RE
+.PP
+\-XX:+UseSHA512Intrinsics
+.RS 4
+Enables intrinsics for SHA\-384 and SHA\-512 crypto hash functions\&.
+.RE
+.PP
+\-XX:+UseSuperWord
+.RS 4
+Enables the transformation of scalar operations into superword operations\&. This option is enabled by default\&. To disable the transformation of scalar operations into superword operations, specify
+\fB\-XX:\-UseSuperWord\fR\&. Only the Java HotSpot Server VM supports this option\&.
+.RE
+.SS "Advanced Serviceability Options"
+.PP
+These options provide the ability to gather system information and perform extensive debugging\&.
+.PP
+\-XX:+ExtendedDTraceProbes
+.RS 4
+Enables additional
+\fBdtrace\fR
+tool probes that impact the performance\&. By default, this option is disabled and
+\fBdtrace\fR
+performs only standard probes\&.
+.RE
+.PP
+\-XX:+HeapDumpOnOutOfMemory
+.RS 4
+Enables the dumping of the Java heap to a file in the current directory by using the heap profiler (HPROF) when a
+\fBjava\&.lang\&.OutOfMemoryError\fR
+exception is thrown\&. You can explicitly set the heap dump file path and name using the
+\fB\-XX:HeapDumpPath\fR
+option\&. By default, this option is disabled and the heap is not dumped when an
+\fBOutOfMemoryError\fR
+exception is thrown\&.
+.RE
+.PP
+\-XX:HeapDumpPath=\fIpath\fR
+.RS 4
+Sets the path and file name for writing the heap dump provided by the heap profiler (HPROF) when the
+\fB\-XX:+HeapDumpOnOutOfMemoryError\fR
+option is set\&. By default, the file is created in the current working directory, and it is named
+\fBjava_pid\fR\fIpid\fR\fB\&.hprof\fR
+where
+\fIpid\fR
+is the identifier of the process that caused the error\&. The following example shows how to set the default file explicitly (\fB%p\fR
+represents the current process identificator):
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:HeapDumpPath=\&./java_pid%p\&.hprof\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+The following example shows how to set the heap dump file to
+\fB/var/log/java/java_heapdump\&.hprof\fR:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:HeapDumpPath=/var/log/java/java_heapdump\&.hprof\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:LogFile=\fIpath\fR
+.RS 4
+Sets the path and file name where log data is written\&. By default, the file is created in the current working directory, and it is named
+\fBhotspot\&.log\fR\&.
+.sp
+The following example shows how to set the log file to
+\fB/var/log/java/hotspot\&.log\fR:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:LogFile=/var/log/java/hotspot\&.log\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:+PrintClassHistogram
+.RS 4
+Enables printing of a class instance histogram after a
+\fBControl+C\fR
+event (\fBSIGTERM\fR)\&. By default, this option is disabled\&.
+.sp
+Setting this option is equivalent to running the
+\fBjmap \-histo\fR
+command, or the
+\fBjcmd \fR\fIpid\fR\fB GC\&.class_histogram\fR
+command, where
+\fIpid\fR
+is the current Java process identifier\&.
+.RE
+.PP
+\-XX:+PrintConcurrentLocks
+.RS 4
+Enables printing of locks after a event\&. By default, this option is disabled\&.
+.sp
+Enables printing of
+\fBjava\&.util\&.concurrent\fR
+locks after a
+\fBControl+C\fR
+event (\fBSIGTERM\fR)\&. By default, this option is disabled\&.
+.sp
+Setting this option is equivalent to running the
+\fBjstack \-l\fR
+command or the
+\fBjcmd \fR\fIpid\fR\fB Thread\&.print \-l\fR
+command, where
+\fIpid\fR
+is the current Java process identifier\&.
+.RE
+.PP
+\-XX:+UnlockDiagnosticVMOptions
+.RS 4
+Unlocks the options intended for diagnosing the JVM\&. By default, this option is disabled and diagnostic options are not available\&.
+.RE
+.SS "Advanced Garbage Collection Options"
+.PP
+These options control how garbage collection (GC) is performed by the Java HotSpot VM\&.
+.PP
+\-XX:+AggressiveHeap
+.RS 4
+Enables Java heap optimization\&. This sets various parameters to be optimal for long\-running jobs with intensive memory allocation, based on the configuration of the computer (RAM and CPU)\&. By default, the option is disabled and the heap is not optimized\&.
+.RE
+.PP
+\-XX:+AlwaysPreTouch
+.RS 4
+Enables touching of every page on the Java heap during JVM initialization\&. This gets all pages into the memory before entering the
+\fBmain()\fR
+method\&. The option can be used in testing to simulate a long\-running system with all virtual memory mapped to physical memory\&. By default, this option is disabled and all pages are committed as JVM heap space fills\&.
+.RE
+.PP
+\-XX:+CMSClassUnloadingEnabled
+.RS 4
+Enables class unloading when using the concurrent mark\-sweep (CMS) garbage collector\&. This option is enabled by default\&. To disable class unloading for the CMS garbage collector, specify
+\fB\-XX:\-CMSClassUnloadingEnabled\fR\&.
+.RE
+.PP
+\-XX:CMSExpAvgFactor=\fIpercent\fR
+.RS 4
+Sets the percentage of time (0 to 100) used to weight the current sample when computing exponential averages for the concurrent collection statistics\&. By default, the exponential averages factor is set to 25%\&. The following example shows how to set the factor to 15%:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:CMSExpAvgFactor=15\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:CMSInitiatingOccupancyFraction=\fIpercent\fR
+.RS 4
+Sets the percentage of the old generation occupancy (0 to 100) at which to start a CMS collection cycle\&. The default value is set to \-1\&. Any negative value (including the default) implies that
+\fB\-XX:CMSTriggerRatio\fR
+is used to define the value of the initiating occupancy fraction\&.
+.sp
+The following example shows how to set the occupancy fraction to 20%:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:CMSInitiatingOccupancyFraction=20\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:+CMSScavengeBeforeRemark
+.RS 4
+Enables scavenging attempts before the CMS remark step\&. By default, this option is disabled\&.
+.RE
+.PP
+\-XX:CMSTriggerRatio=\fIpercent\fR
+.RS 4
+Sets the percentage (0 to 100) of the value specified by
+\fB\-XX:MinHeapFreeRatio\fR
+that is allocated before a CMS collection cycle commences\&. The default value is set to 80%\&.
+.sp
+The following example shows how to set the occupancy fraction to 75%:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:CMSTriggerRatio=75\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:ConcGCThreads=\fIthreads\fR
+.RS 4
+Sets the number of threads used for concurrent GC\&. The default value depends on the number of CPUs available to the JVM\&.
+.sp
+For example, to set the number of threads for concurrent GC to 2, specify the following option:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:ConcGCThreads=2\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:+DisableExplicitGC
+.RS 4
+Enables the option that disables processing of calls to
+\fBSystem\&.gc()\fR\&. This option is disabled by default, meaning that calls to
+\fBSystem\&.gc()\fR
+are processed\&. If processing of calls to
+\fBSystem\&.gc()\fR
+is disabled, the JVM still performs GC when necessary\&.
+.RE
+.PP
+\-XX:+ExplicitGCInvokesConcurrent
+.RS 4
+Enables invoking of concurrent GC by using the
+\fBSystem\&.gc()\fR
+request\&. This option is disabled by default and can be enabled only together with the
+\fB\-XX:+UseConcMarkSweepGC\fR
+option\&.
+.RE
+.PP
+\-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses
+.RS 4
+Enables invoking of concurrent GC by using the
+\fBSystem\&.gc()\fR
+request and unloading of classes during the concurrent GC cycle\&. This option is disabled by default and can be enabled only together with the
+\fB\-XX:+UseConcMarkSweepGC\fR
+option\&.
+.RE
+.PP
+\-XX:G1HeapRegionSize=\fIsize\fR
+.RS 4
+Sets the size of the regions into which the Java heap is subdivided when using the garbage\-first (G1) collector\&. The value can be between 1 MB and 32 MB\&. The default region size is determined ergonomically based on the heap size\&.
+.sp
+The following example shows how to set the size of the subdivisions to 16 MB:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:G1HeapRegionSize=16m\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:+G1PrintHeapRegions
+.RS 4
+Enables the printing of information about which regions are allocated and which are reclaimed by the G1 collector\&. By default, this option is disabled\&.
+.RE
+.PP
+\-XX:G1ReservePercent=\fIpercent\fR
+.RS 4
+Sets the percentage of the heap (0 to 50) that is reserved as a false ceiling to reduce the possibility of promotion failure for the G1 collector\&. By default, this option is set to 10%\&.
+.sp
+The following example shows how to set the reserved heap to 20%:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:G1ReservePercent=20\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:InitialHeapSize=\fIsize\fR
+.RS 4
+Sets the initial size (in bytes) of the memory allocation pool\&. This value must be either 0, or a multiple of 1024 and greater than 1 MB\&. Append the letter
+\fBk\fR
+or
+\fBK\fR
+to indicate kilobytes,
+\fBm\fR
+or
+\fBM\fR
+to indicate megabytes,
+\fBg\fR
+or
+\fBG\fR
+to indicate gigabytes\&. The default value is chosen at runtime based on system configuration\&. See the section "Ergonomics" in
+\fIJava SE HotSpot Virtual Machine Garbage Collection Tuning Guide\fR
+at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/gctuning/index\&.html\&.
+.sp
+The following examples show how to set the size of allocated memory to 6 MB using various units:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:InitialHeapSize=6291456\fR
+\fB\-XX:InitialHeapSize=6144k\fR
+\fB\-XX:InitialHeapSize=6m\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+If you set this option to 0, then the initial size will be set as the sum of the sizes allocated for the old generation and the young generation\&. The size of the heap for the young generation can be set using the
+\fB\-XX:NewSize\fR
+option\&.
+.RE
+.PP
+\-XX:InitialSurvivorRatio=\fIratio\fR
+.RS 4
+Sets the initial survivor space ratio used by the throughput garbage collector (which is enabled by the
+\fB\-XX:+UseParallelGC\fR
+and/or \-\fBXX:+UseParallelOldGC\fR
+options)\&. Adaptive sizing is enabled by default with the throughput garbage collector by using the
+\fB\-XX:+UseParallelGC\fR
+and
+\fB\-XX:+UseParallelOldGC\fR
+options, and survivor space is resized according to the application behavior, starting with the initial value\&. If adaptive sizing is disabled (using the
+\fB\-XX:\-UseAdaptiveSizePolicy\fR
+option), then the
+\fB\-XX:SurvivorRatio\fR
+option should be used to set the size of the survivor space for the entire execution of the application\&.
+.sp
+The following formula can be used to calculate the initial size of survivor space (S) based on the size of the young generation (Y), and the initial survivor space ratio (R):
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBS=Y/(R+2)\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+The 2 in the equation denotes two survivor spaces\&. The larger the value specified as the initial survivor space ratio, the smaller the initial survivor space size\&.
+.sp
+By default, the initial survivor space ratio is set to 8\&. If the default value for the young generation space size is used (2 MB), the initial size of the survivor space will be 0\&.2 MB\&.
+.sp
+The following example shows how to set the initial survivor space ratio to 4:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:InitialSurvivorRatio=4\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:InitiatingHeapOccupancyPercent=\fIpercent\fR
+.RS 4
+Sets the percentage of the heap occupancy (0 to 100) at which to start a concurrent GC cycle\&. It is used by garbage collectors that trigger a concurrent GC cycle based on the occupancy of the entire heap, not just one of the generations (for example, the G1 garbage collector)\&.
+.sp
+By default, the initiating value is set to 45%\&. A value of 0 implies nonstop GC cycles\&. The following example shows how to set the initiating heap occupancy to 75%:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:InitiatingHeapOccupancyPercent=75\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:MaxGCPauseMillis=\fItime\fR
+.RS 4
+Sets a target for the maximum GC pause time (in milliseconds)\&. This is a soft goal, and the JVM will make its best effort to achieve it\&. By default, there is no maximum pause time value\&.
+.sp
+The following example shows how to set the maximum target pause time to 500 ms:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:MaxGCPauseMillis=500\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:MaxHeapSize=\fIsize\fR
+.RS 4
+Sets the maximum size (in byes) of the memory allocation pool\&. This value must be a multiple of 1024 and greater than 2 MB\&. Append the letter
+\fBk\fR
+or
+\fBK\fR
+to indicate kilobytes,
+\fBm\fR
+or
+\fBM\fR
+to indicate megabytes,
+\fBg\fR
+or
+\fBG\fR
+to indicate gigabytes\&. The default value is chosen at runtime based on system configuration\&. For server deployments,
+\fB\-XX:InitialHeapSize\fR
+and
+\fB\-XX:MaxHeapSize\fR
+are often set to the same value\&. See the section "Ergonomics" in
+\fIJava SE HotSpot Virtual Machine Garbage Collection Tuning Guide\fR
+at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/gctuning/index\&.html\&.
+.sp
+The following examples show how to set the maximum allowed size of allocated memory to 80 MB using various units:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:MaxHeapSize=83886080\fR
+\fB\-XX:MaxHeapSize=81920k\fR
+\fB\-XX:MaxHeapSize=80m\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+On Oracle Solaris 7 and Oracle Solaris 8 SPARC platforms, the upper limit for this value is approximately 4,000 MB minus overhead amounts\&. On Oracle Solaris 2\&.6 and x86 platforms, the upper limit is approximately 2,000 MB minus overhead amounts\&. On Linux platforms, the upper limit is approximately 2,000 MB minus overhead amounts\&.
+.sp
+The
+\fB\-XX:MaxHeapSize\fR
+option is equivalent to
+\fB\-Xmx\fR\&.
+.RE
+.PP
+\-XX:MaxHeapFreeRatio=\fIpercent\fR
+.RS 4
+Sets the maximum allowed percentage of free heap space (0 to 100) after a GC event\&. If free heap space expands above this value, then the heap will be shrunk\&. By default, this value is set to 70%\&.
+.sp
+The following example shows how to set the maximum free heap ratio to 75%:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:MaxHeapFreeRatio=75\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:MaxMetaspaceSize=\fIsize\fR
+.RS 4
+Sets the maximum amount of native memory that can be allocated for class metadata\&. By default, the size is not limited\&. The amount of metadata for an application depends on the application itself, other running applications, and the amount of memory available on the system\&.
+.sp
+The following example shows how to set the maximum class metadata size to 256 MB:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:MaxMetaspaceSize=256m\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:MaxNewSize=\fIsize\fR
+.RS 4
+Sets the maximum size (in bytes) of the heap for the young generation (nursery)\&. The default value is set ergonomically\&.
+.RE
+.PP
+\-XX:MaxTenuringThreshold=\fIthreshold\fR
+.RS 4
+Sets the maximum tenuring threshold for use in adaptive GC sizing\&. The largest value is 15\&. The default value is 15 for the parallel (throughput) collector, and 6 for the CMS collector\&.
+.sp
+The following example shows how to set the maximum tenuring threshold to 10:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:MaxTenuringThreshold=10\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:MetaspaceSize=\fIsize\fR
+.RS 4
+Sets the size of the allocated class metadata space that will trigger a garbage collection the first time it is exceeded\&. This threshold for a garbage collection is increased or decreased depending on the amount of metadata used\&. The default size depends on the platform\&.
+.RE
+.PP
+\-XX:MinHeapFreeRatio=\fIpercent\fR
+.RS 4
+Sets the minimum allowed percentage of free heap space (0 to 100) after a GC event\&. If free heap space falls below this value, then the heap will be expanded\&. By default, this value is set to 40%\&.
+.sp
+The following example shows how to set the minimum free heap ratio to 25%:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:MinHeapFreeRatio=25\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:NewRatio=\fIratio\fR
+.RS 4
+Sets the ratio between young and old generation sizes\&. By default, this option is set to 2\&. The following example shows how to set the young/old ratio to 1:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:NewRatio=1\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:NewSize=\fIsize\fR
+.RS 4
+Sets the initial size (in bytes) of the heap for the young generation (nursery)\&. Append the letter
+\fBk\fR
+or
+\fBK\fR
+to indicate kilobytes,
+\fBm\fR
+or
+\fBM\fR
+to indicate megabytes,
+\fBg\fR
+or
+\fBG\fR
+to indicate gigabytes\&.
+.sp
+The young generation region of the heap is used for new objects\&. GC is performed in this region more often than in other regions\&. If the size for the young generation is too low, then a large number of minor GCs will be performed\&. If the size is too high, then only full GCs will be performed, which can take a long time to complete\&. Oracle recommends that you keep the size for the young generation between a half and a quarter of the overall heap size\&.
+.sp
+The following examples show how to set the initial size of young generation to 256 MB using various units:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:NewSize=256m\fR
+\fB\-XX:NewSize=262144k\fR
+\fB\-XX:NewSize=268435456\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+The
+\fB\-XX:NewSize\fR
+option is equivalent to
+\fB\-Xmn\fR\&.
+.RE
+.PP
+\-XX:ParallelGCThreads=\fIthreads\fR
+.RS 4
+Sets the number of threads used for parallel garbage collection in the young and old generations\&. The default value depends on the number of CPUs available to the JVM\&.
+.sp
+For example, to set the number of threads for parallel GC to 2, specify the following option:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:ParallelGCThreads=2\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:+ParallelRefProcEnabled
+.RS 4
+Enables parallel reference processing\&. By default, this option is disabled\&.
+.RE
+.PP
+\-XX:+PrintAdaptiveSizePolicy
+.RS 4
+Enables printing of information about adaptive generation sizing\&. By default, this option is disabled\&.
+.RE
+.PP
+\-XX:+PrintGC
+.RS 4
+Enables printing of messages at every GC\&. By default, this option is disabled\&.
+.RE
+.PP
+\-XX:+PrintGCApplicationConcurrentTime
+.RS 4
+Enables printing of how much time elapsed since the last pause (for example, a GC pause)\&. By default, this option is disabled\&.
+.RE
+.PP
+\-XX:+PrintGCApplicationStoppedTime
+.RS 4
+Enables printing of how much time the pause (for example, a GC pause) lasted\&. By default, this option is disabled\&.
+.RE
+.PP
+\-XX:+PrintGCDateStamps
+.RS 4
+Enables printing of a date stamp at every GC\&. By default, this option is disabled\&.
+.RE
+.PP
+\-XX:+PrintGCDetails
+.RS 4
+Enables printing of detailed messages at every GC\&. By default, this option is disabled\&.
+.RE
+.PP
+\-XX:+PrintGCTaskTimeStamps
+.RS 4
+Enables printing of time stamps for every individual GC worker thread task\&. By default, this option is disabled\&.
+.RE
+.PP
+\-XX:+PrintGCTimeStamps
+.RS 4
+Enables printing of time stamps at every GC\&. By default, this option is disabled\&.
+.RE
+.PP
+\-XX:+PrintStringDeduplicationStatistics
+.RS 4
+Prints detailed deduplication statistics\&. By default, this option is disabled\&. See the
+\fB\-XX:+UseStringDeduplication\fR
+option\&.
+.RE
+.PP
+\-XX:+PrintTenuringDistribution
+.RS 4
+Enables printing of tenuring age information\&. The following is an example of the output:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBDesired survivor size 48286924 bytes, new threshold 10 (max 10)\fR
+\fB\- age 1: 28992024 bytes, 28992024 total\fR
+\fB\- age 2: 1366864 bytes, 30358888 total\fR
+\fB\- age 3: 1425912 bytes, 31784800 total\fR
+\fB\&.\&.\&.\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+Age 1 objects are the youngest survivors (they were created after the previous scavenge, survived the latest scavenge, and moved from eden to survivor space)\&. Age 2 objects have survived two scavenges (during the second scavenge they were copied from one survivor space to the next)\&. And so on\&.
+.sp
+In the preceding example, 28 992 024 bytes survived one scavenge and were copied from eden to survivor space, 1 366 864 bytes are occupied by age 2 objects, etc\&. The third value in each row is the cumulative size of objects of age n or less\&.
+.sp
+By default, this option is disabled\&.
+.RE
+.PP
+\-XX:+ScavengeBeforeFullGC
+.RS 4
+Enables GC of the young generation before each full GC\&. This option is enabled by default\&. Oracle recommends that you
+\fIdo not\fR
+disable it, because scavenging the young generation before a full GC can reduce the number of objects reachable from the old generation space into the young generation space\&. To disable GC of the young generation before each full GC, specify
+\fB\-XX:\-ScavengeBeforeFullGC\fR\&.
+.RE
+.PP
+\-XX:SoftRefLRUPolicyMSPerMB=\fItime\fR
+.RS 4
+Sets the amount of time (in milliseconds) a softly reachable object is kept active on the heap after the last time it was referenced\&. The default value is one second of lifetime per free megabyte in the heap\&. The
+\fB\-XX:SoftRefLRUPolicyMSPerMB\fR
+option accepts integer values representing milliseconds per one megabyte of the current heap size (for Java HotSpot Client VM) or the maximum possible heap size (for Java HotSpot Server VM)\&. This difference means that the Client VM tends to flush soft references rather than grow the heap, whereas the Server VM tends to grow the heap rather than flush soft references\&. In the latter case, the value of the
+\fB\-Xmx\fR
+option has a significant effect on how quickly soft references are garbage collected\&.
+.sp
+The following example shows how to set the value to 2\&.5 seconds:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:SoftRefLRUPolicyMSPerMB=2500\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:StringDeduplicationAgeThreshold=\fIthreshold\fR
+.RS 4
+\fBString\fR
+objects reaching the specified age are considered candidates for deduplication\&. An object\*(Aqs age is a measure of how many times it has survived garbage collection\&. This is sometimes referred to as tenuring; see the
+\fB\-XX:+PrintTenuringDistribution\fR
+option\&. Note that
+\fBString\fR
+objects that are promoted to an old heap region before this age has been reached are always considered candidates for deduplication\&. The default value for this option is
+\fB3\fR\&. See the
+\fB\-XX:+UseStringDeduplication\fR
+option\&.
+.RE
+.PP
+\-XX:SurvivorRatio=\fIratio\fR
+.RS 4
+Sets the ratio between eden space size and survivor space size\&. By default, this option is set to 8\&. The following example shows how to set the eden/survivor space ratio to 4:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:SurvivorRatio=4\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:TargetSurvivorRatio=\fIpercent\fR
+.RS 4
+Sets the desired percentage of survivor space (0 to 100) used after young garbage collection\&. By default, this option is set to 50%\&.
+.sp
+The following example shows how to set the target survivor space ratio to 30%:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:TargetSurvivorRatio=30\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:TLABSize=\fIsize\fR
+.RS 4
+Sets the initial size (in bytes) of a thread\-local allocation buffer (TLAB)\&. Append the letter
+\fBk\fR
+or
+\fBK\fR
+to indicate kilobytes,
+\fBm\fR
+or
+\fBM\fR
+to indicate megabytes,
+\fBg\fR
+or
+\fBG\fR
+to indicate gigabytes\&. If this option is set to 0, then the JVM chooses the initial size automatically\&.
+.sp
+The following example shows how to set the initial TLAB size to 512 KB:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\-XX:TLABSize=512k\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\-XX:+UseAdaptiveSizePolicy
+.RS 4
+Enables the use of adaptive generation sizing\&. This option is enabled by default\&. To disable adaptive generation sizing, specify
+\fB\-XX:\-UseAdaptiveSizePolicy\fR
+and set the size of the memory allocation pool explicitly (see the
+\fB\-XX:SurvivorRatio\fR
+option)\&.
+.RE
+.PP
+\-XX:+UseCMSInitiatingOccupancyOnly
+.RS 4
+Enables the use of the occupancy value as the only criterion for initiating the CMS collector\&. By default, this option is disabled and other criteria may be used\&.
+.RE
+.PP
+\-XX:+UseConcMarkSweepGC
+.RS 4
+Enables the use of the CMS garbage collector for the old generation\&. Oracle recommends that you use the CMS garbage collector when application latency requirements cannot be met by the throughput (\fB\-XX:+UseParallelGC\fR) garbage collector\&. The G1 garbage collector (\fB\-XX:+UseG1GC\fR) is another alternative\&.
+.sp
+By default, this option is disabled and the collector is chosen automatically based on the configuration of the machine and type of the JVM\&. When this option is enabled, the
+\fB\-XX:+UseParNewGC\fR
+option is automatically set and you should not disable it, because the following combination of options has been deprecated in JDK 8:
+\fB\-XX:+UseConcMarkSweepGC \-XX:\-UseParNewGC\fR\&.
+.RE
+.PP
+\-XX:+UseG1GC
+.RS 4
+Enables the use of the garbage\-first (G1) garbage collector\&. It is a server\-style garbage collector, targeted for multiprocessor machines with a large amount of RAM\&. It meets GC pause time goals with high probability, while maintaining good throughput\&. The G1 collector is recommended for applications requiring large heaps (sizes of around 6 GB or larger) with limited GC latency requirements (stable and predictable pause time below 0\&.5 seconds)\&.
+.sp
+By default, this option is disabled and the collector is chosen automatically based on the configuration of the machine and type of the JVM\&.
+.RE
+.PP
+\-XX:+UseGCOverheadLimit
+.RS 4
+Enables the use of a policy that limits the proportion of time spent by the JVM on GC before an
+\fBOutOfMemoryError\fR
+exception is thrown\&. This option is enabled, by default and the parallel GC will throw an
+\fBOutOfMemoryError\fR
+if more than 98% of the total time is spent on garbage collection and less than 2% of the heap is recovered\&. When the heap is small, this feature can be used to prevent applications from running for long periods of time with little or no progress\&. To disable this option, specify
+\fB\-XX:\-UseGCOverheadLimit\fR\&.
+.RE
+.PP
+\-XX:+UseNUMA
+.RS 4
+Enables performance optimization of an application on a machine with nonuniform memory architecture (NUMA) by increasing the application\*(Aqs use of lower latency memory\&. By default, this option is disabled and no optimization for NUMA is made\&. The option is only available when the parallel garbage collector is used (\fB\-XX:+UseParallelGC\fR)\&.
+.RE
+.PP
+\-XX:+UseParallelGC
+.RS 4
+Enables the use of the parallel scavenge garbage collector (also known as the throughput collector) to improve the performance of your application by leveraging multiple processors\&.
+.sp
+By default, this option is disabled and the collector is chosen automatically based on the configuration of the machine and type of the JVM\&. If it is enabled, then the
+\fB\-XX:+UseParallelOldGC\fR
+option is automatically enabled, unless you explicitly disable it\&.
+.RE
+.PP
+\-XX:+UseParallelOldGC
+.RS 4
+Enables the use of the parallel garbage collector for full GCs\&. By default, this option is disabled\&. Enabling it automatically enables the
+\fB\-XX:+UseParallelGC\fR
+option\&.
+.RE
+.PP
+\-XX:+UseParNewGC
+.RS 4
+Enables the use of parallel threads for collection in the young generation\&. By default, this option is disabled\&. It is automatically enabled when you set the
+\fB\-XX:+UseConcMarkSweepGC\fR
+option\&. Using the
+\fB\-XX:+UseParNewGC\fR
+option without the
+\fB\-XX:+UseConcMarkSweepGC\fR
+option was deprecated in JDK 8\&.
+.RE
+.PP
+\-XX:+UseSerialGC
+.RS 4
+Enables the use of the serial garbage collector\&. This is generally the best choice for small and simple applications that do not require any special functionality from garbage collection\&. By default, this option is disabled and the collector is chosen automatically based on the configuration of the machine and type of the JVM\&.
+.RE
+.PP
+\-XX:+UseSHM
+.RS 4
+On Linux, enables the JVM to use shared memory to setup large pages\&.
+.sp
+For more information, see "Large Pages"\&.
+.RE
+.PP
+\-XX:+UseStringDeduplication
+.RS 4
+Enables string deduplication\&. By default, this option is disabled\&. To use this option, you must enable the garbage\-first (G1) garbage collector\&. See the
+\fB\-XX:+UseG1GC\fR
+option\&.
+.sp
+\fIString deduplication\fR
+reduces the memory footprint of
+\fBString\fR
+objects on the Java heap by taking advantage of the fact that many
+\fBString\fR
+objects are identical\&. Instead of each
+\fBString\fR
+object pointing to its own character array, identical
+\fBString\fR
+objects can point to and share the same character array\&.
+.RE
+.PP
+\-XX:+UseTLAB
+.RS 4
+Enables the use of thread\-local allocation blocks (TLABs) in the young generation space\&. This option is enabled by default\&. To disable the use of TLABs, specify
+\fB\-XX:\-UseTLAB\fR\&.
+.RE
+.SS "Deprecated and Removed Options"
+.PP
+These options were included in the previous release, but have since been considered unnecessary\&.
+.PP
+\-Xincgc
+.RS 4
+Enables incremental garbage collection\&. This option was deprecated in JDK 8 with no replacement\&.
+.RE
+.PP
+\-Xrun\fIlibname\fR
+.RS 4
+Loads the specified debugging/profiling library\&. This option was superseded by the
+\fB\-agentlib\fR
+option\&.
+.RE
+.PP
+\-XX:CMSIncrementalDutyCycle=\fIpercent\fR
+.RS 4
+Sets the percentage of time (0 to 100) between minor collections that the concurrent collector is allowed to run\&. This option was deprecated in JDK 8 with no replacement, following the deprecation of the
+\fB\-XX:+CMSIncrementalMode\fR
+option\&.
+.RE
+.PP
+\-XX:CMSIncrementalDutyCycleMin=\fIpercent\fR
+.RS 4
+Sets the percentage of time (0 to 100) between minor collections that is the lower bound for the duty cycle when
+\fB\-XX:+CMSIncrementalPacing\fR
+is enabled\&. This option was deprecated in JDK 8 with no replacement, following the deprecation of the
+\fB\-XX:+CMSIncrementalMode\fR
+option\&.
+.RE
+.PP
+\-XX:+CMSIncrementalMode
+.RS 4
+Enables the incremental mode for the CMS collector\&. This option was deprecated in JDK 8 with no replacement, along with other options that start with
+\fBCMSIncremental\fR\&.
+.RE
+.PP
+\-XX:CMSIncrementalOffset=\fIpercent\fR
+.RS 4
+Sets the percentage of time (0 to 100) by which the incremental mode duty cycle is shifted to the right within the period between minor collections\&. This option was deprecated in JDK 8 with no replacement, following the deprecation of the
+\fB\-XX:+CMSIncrementalMode\fR
+option\&.
+.RE
+.PP
+\-XX:+CMSIncrementalPacing
+.RS 4
+Enables automatic adjustment of the incremental mode duty cycle based on statistics collected while the JVM is running\&. This option was deprecated in JDK 8 with no replacement, following the deprecation of the
+\fB\-XX:+CMSIncrementalMode\fR
+option\&.
+.RE
+.PP
+\-XX:CMSIncrementalSafetyFactor=\fIpercent\fR
+.RS 4
+Sets the percentage of time (0 to 100) used to add conservatism when computing the duty cycle\&. This option was deprecated in JDK 8 with no replacement, following the deprecation of the
+\fB\-XX:+CMSIncrementalMode\fR
+option\&.
+.RE
+.PP
+\-XX:CMSInitiatingPermOccupancyFraction=\fIpercent\fR
+.RS 4
+Sets the percentage of the permanent generation occupancy (0 to 100) at which to start a GC\&. This option was deprecated in JDK 8 with no replacement\&.
+.RE
+.PP
+\-XX:MaxPermSize=\fIsize\fR
+.RS 4
+Sets the maximum permanent generation space size (in bytes)\&. This option was deprecated in JDK 8, and superseded by the
+\fB\-XX:MaxMetaspaceSize\fR
+option\&.
+.RE
+.PP
+\-XX:PermSize=\fIsize\fR
+.RS 4
+Sets the space (in bytes) allocated to the permanent generation that triggers a garbage collection if it is exceeded\&. This option was deprecated un JDK 8, and superseded by the
+\fB\-XX:MetaspaceSize\fR
+option\&.
+.RE
+.PP
+\-XX:+UseSplitVerifier
+.RS 4
+Enables splitting of the verification process\&. By default, this option was enabled in the previous releases, and verification was split into two phases: type referencing (performed by the compiler) and type checking (performed by the JVM runtime)\&. This option was deprecated in JDK 8, and verification is now split by default without a way to disable it\&.
+.RE
+.PP
+\-XX:+UseStringCache
+.RS 4
+Enables caching of commonly allocated strings\&. This option was removed from JDK 8 with no replacement\&.
+.RE
+.SH "PERFORMANCE TUNING EXAMPLES"
+.PP
+The following examples show how to use experimental tuning flags to either optimize throughput or to provide lower response time\&.
+.PP
+\fBExample 1 \fRTuning for Higher Throughput
+.RS 4
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBjava \-d64 \-server \-XX:+AggressiveOpts \-XX:+UseLargePages \-Xmn10g \-Xms26g \-Xmx26g\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\fBExample 2 \fRTuning for Lower Response Time
+.RS 4
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBjava \-d64 \-XX:+UseG1GC \-Xms26g Xmx26g \-XX:MaxGCPauseMillis=500 \-XX:+PrintGCTimeStamp\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.SH "LARGE PAGES"
+.PP
+Also known as huge pages, large pages are memory pages that are significantly larger than the standard memory page size (which varies depending on the processor and operating system)\&. Large pages optimize processor Translation\-Lookaside Buffers\&.
+.PP
+A Translation\-Lookaside Buffer (TLB) is a page translation cache that holds the most\-recently used virtual\-to\-physical address translations\&. TLB is a scarce system resource\&. A TLB miss can be costly as the processor must then read from the hierarchical page table, which may require multiple memory accesses\&. By using a larger memory page size, a single TLB entry can represent a larger memory range\&. There will be less pressure on TLB, and memory\-intensive applications may have better performance\&.
+.PP
+However, large pages page memory can negatively affect system performance\&. For example, when a large mount of memory is pinned by an application, it may create a shortage of regular memory and cause excessive paging in other applications and slow down the entire system\&. Also, a system that has been up for a long time could produce excessive fragmentation, which could make it impossible to reserve enough large page memory\&. When this happens, either the OS or JVM reverts to using regular pages\&.
+.SS "Large Pages Support"
+.PP
+Solaris and Linux support large pages\&.
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.ps +1
+\fBSolaris\fR
+.RS 4
+.PP
+Solaris 9 and later include Multiple Page Size Support (MPSS); no additional configuration is necessary\&. See http://www\&.oracle\&.com/technetwork/server\-storage/solaris10/overview/solaris9\-features\-scalability\-135663\&.html\&.
+.RE
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.ps +1
+\fBLinux\fR
+.RS 4
+.PP
+The 2\&.6 kernel supports large pages\&. Some vendors have backported the code to their 2\&.4\-based releases\&. To check if your system can support large page memory, try the following:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB# cat /proc/meminfo | grep Huge\fR
+\fBHugePages_Total: 0\fR
+\fBHugePages_Free: 0\fR
+\fBHugepagesize: 2048 kB\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+If the output shows the three "Huge" variables, then your system can support large page memory but it needs to be configured\&. If the command prints nothing, then your system does not support large pages\&. To configure the system to use large page memory, login as
+\fBroot\fR, and then follow these steps:
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 1.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 1." 4.2
+.\}
+If you are using the option
+\fB\-XX:+UseSHM\fR
+(instead of
+\fB\-XX:+UseHugeTLBFS\fR), then increase the
+\fBSHMMAX\fR
+value\&. It must be larger than the Java heap size\&. On a system with 4 GB of physical RAM (or less), the following will make all the memory sharable:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB# echo 4294967295 > /proc/sys/kernel/shmmax\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 2.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 2." 4.2
+.\}
+If you are using the option
+\fB\-XX:+UseSHM\fR
+or
+\fB\-XX:+UseHugeTLBFS\fR, then specify the number of large pages\&. In the following example, 3 GB of a 4 GB system are reserved for large pages (assuming a large page size of 2048kB, then 3 GB = 3 * 1024 MB = 3072 MB = 3072 * 1024 kB = 3145728 kB and 3145728 kB / 2048 kB = 1536):
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB# echo 1536 > /proc/sys/vm/nr_hugepages\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.if n \{\
+.sp
+.\}
+.RS 4
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.ps +1
+\fBNote\fR
+.ps -1
+.br
+.TS
+allbox tab(:);
+l.
+T{
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Note that the values contained in
+\fB/proc\fR
+will reset after you reboot your system, so may want to set them in an initialization script (for example,
+\fBrc\&.local\fR
+or
+\fBsysctl\&.conf\fR)\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+If you configure (or resize) the OS kernel parameters
+\fB/proc/sys/kernel/shmmax\fR
+or
+\fB/proc/sys/vm/nr_hugepages\fR, Java processes may allocate large pages for areas in addition to the Java heap\&. These steps can allocate large pages for the following areas:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Java heap
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Code cache
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+The marking bitmap data structure for the parallel GC
+.RE
+.sp
+Consequently, if you configure the
+\fBnr_hugepages\fR
+parameter to the size of the Java heap, then the JVM can fail in allocating the code cache areas on large pages because these areas are quite large in size\&.
+.RE
+T}
+.TE
+.sp 1
+.sp .5v
+.RE
+.RE
+.SH "EXIT STATUS"
+.PP
+The following exit values are typically returned by the launcher when the launcher is called with the wrong arguments, serious errors, or exceptions thrown by the JVM\&. However, a Java application may choose to return any value by using the API call
+\fBSystem\&.exit(exitValue)\fR\&. The values are:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fB0\fR: Successful completion
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fB>0\fR: An error occurred
+.RE
+.SH "SEE ALSO"
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+javac(1)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+jdb(1)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+javah(1)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+jar(1)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+jstat(1)
+.RE
+.br
+'pl 8.5i
+'bp
diff --git a/FCL/src/main/assets/java/man/man1/jjs.1 b/FCL/src/main/assets/java/man/man1/jjs.1
new file mode 100644
index 000000000..04f8028c3
--- /dev/null
+++ b/FCL/src/main/assets/java/man/man1/jjs.1
@@ -0,0 +1,247 @@
+'\" t
+.\" Copyright (c) 1994, 2015, Oracle and/or its affiliates. All rights reserved.
+.\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+.\"
+.\" This code is free software; you can redistribute it and/or modify it
+.\" under the terms of the GNU General Public License version 2 only, as
+.\" published by the Free Software Foundation.
+.\"
+.\" This code 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
+.\" version 2 for more details (a copy is included in the LICENSE file that
+.\" accompanied this code).
+.\"
+.\" You should have received a copy of the GNU General Public License version
+.\" 2 along with this work; if not, write to the Free Software Foundation,
+.\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+.\"
+.\" Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+.\" or visit www.oracle.com if you need additional information or have any
+.\" questions.
+.\"
+.\" Title: jjs
+.\" Language: English
+.\" Date: 03 March 2015
+.\" SectDesc: Basic Tools
+.\" Software: JDK 8
+.\" Arch: generic
+.\" Part Number: E38207-04
+.\" Doc ID: JSSON
+.\"
+.if n .pl 99999
+.TH "jjs" "1" "03 March 2015" "JDK 8" "Basic Tools"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+jjs \- Invokes the Nashorn engine\&.
+.SH "SYNOPSIS"
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB\fBjjs\fR\fR\fB [\fR\fB\fIoptions\fR\fR\fB] [\fR\fB\fIscript\-files\fR\fR\fB] [\-\- \fR\fB\fIarguments\fR\fR\fB]\fR
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+\fIoptions\fR
+.RS 4
+One or more options of the
+\fBjjs\fR
+command, separated by spaces\&. For more information, see Options\&.
+.RE
+.PP
+\fIscript\-files\fR
+.RS 4
+One or more script files which you want to interpret using Nashorn, separated by spaces\&. If no files are specified, an interactive shell is started\&.
+.RE
+.PP
+\fIarguments\fR
+.RS 4
+All values after the double hyphen marker (\fB\-\-\fR) are passed through to the script or the interactive shell as arguments\&. These values can be accessed by using the
+\fBarguments\fR
+property (see Example 3)\&.
+.RE
+.SH "DESCRIPTION"
+.PP
+The
+\fBjjs\fR
+command\-line tool is used to invoke the Nashorn engine\&. You can use it to interpret one or several script files, or to run an interactive shell\&.
+.SH "OPTIONS"
+.PP
+The options of the
+\fBjjs\fR
+command control the conditions under which scripts are interpreted by Nashorn\&.
+.PP
+\-cp \fIpath\fR
+.br
+\-classpath \fIpath\fR
+.RS 4
+Specifies the path to the supporting class files To set multiple paths, the option can be repeated, or you can separate each path with a colon (:)\&.
+.RE
+.PP
+\-D\fIname\fR=\fIvalue\fR
+.RS 4
+Sets a system property to be passed to the script by assigning a value to a property name\&. The following example shows how to invoke Nashorn in interactive mode and assign
+\fBmyValue\fR
+to the property named
+\fBmyKey\fR:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB>> \fR\fB\fBjjs \-DmyKey=myValue\fR\fR
+\fBjjs> \fR\fB\fBjava\&.lang\&.System\&.getProperty("myKey")\fR\fR
+\fBmyValue\fR
+\fBjjs>\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+This option can be repeated to set multiple properties\&.
+.RE
+.PP
+\-doe
+.br
+\-\-dump\-on\-error
+.RS 4
+Provides a full stack trace when an error occurs\&. By default, only a brief error message is printed\&.
+.RE
+.PP
+\-fv
+.br
+\-\-fullversion
+.RS 4
+Prints the full Nashorn version string\&.
+.RE
+.PP
+\-fx
+.RS 4
+Launches the script as a JavaFX application\&.
+.RE
+.PP
+\-h
+.br
+\-help
+.RS 4
+Prints the list of options and their descriptions\&.
+.RE
+.PP
+\-\-language=[es5]
+.RS 4
+Specifies the ECMAScript language version\&. The default version is ES5\&.
+.RE
+.PP
+\-ot
+.br
+\-\-optimistic\-types=[true|false]
+.RS 4
+Enables or disables optimistic type assumptions with deoptimizing recompilation\&. Running with optimistic types will yield higher final speed, but may increase warmup time\&.
+.RE
+.PP
+\-scripting
+.RS 4
+Enables shell scripting features\&.
+.RE
+.PP
+\-strict
+.RS 4
+Enables strict mode, which enforces stronger adherence to the standard (ECMAScript Edition 5\&.1), making it easier to detect common coding errors\&.
+.RE
+.PP
+\-t=\fIzone\fR
+.br
+\-timezone=\fIzone\fR
+.RS 4
+Sets the specified time zone for script execution\&. It overrides the time zone set in the OS and used by the
+\fBDate\fR
+object\&.
+.RE
+.PP
+\-v
+.br
+\-version
+.RS 4
+Prints the Nashorn version string\&.
+.RE
+.SH "EXAMPLES"
+.PP
+\fBExample 1 \fRRunning a Script with Nashorn
+.RS 4
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBjjs script\&.js\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\fBExample 2 \fRRunning Nashorn in Interactive Mode
+.RS 4
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB>> \fR\fB\fBjjs\fR\fR
+\fBjjs> \fR\fB\fBprintln("Hello, World!")\fR\fR
+\fBHello, World!\fR
+\fBjjs> \fR\fB\fBquit()\fR\fR
+\fB>>\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\fBExample 3 \fRPassing Arguments to Nashorn
+.RS 4
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB>> \fR\fB\fBjjs \-\- a b c\fR\fR
+\fBjjs> \fR\fB\fBarguments\&.join(", ")\fR\fR
+\fBa, b, c\fR
+\fBjjs>\fR
+
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.SH "SEE ALSO"
+.PP
+\fBjrunscript\fR
+.br
+'pl 8.5i
+'bp
diff --git a/FCL/src/main/assets/java/man/man1/keytool.1 b/FCL/src/main/assets/java/man/man1/keytool.1
new file mode 100644
index 000000000..a29e1ffea
--- /dev/null
+++ b/FCL/src/main/assets/java/man/man1/keytool.1
@@ -0,0 +1,1619 @@
+'\" t
+.\" Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
+.\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+.\"
+.\" This code is free software; you can redistribute it and/or modify it
+.\" under the terms of the GNU General Public License version 2 only, as
+.\" published by the Free Software Foundation.
+.\"
+.\" This code 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
+.\" version 2 for more details (a copy is included in the LICENSE file that
+.\" accompanied this code).
+.\"
+.\" You should have received a copy of the GNU General Public License version
+.\" 2 along with this work; if not, write to the Free Software Foundation,
+.\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+.\"
+.\" Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+.\" or visit www.oracle.com if you need additional information or have any
+.\" questions.
+.\"
+.\" Arch: generic
+.\" Software: JDK 8
+.\" Date: 03 March 2015
+.\" SectDesc: Security Tools
+.\" Title: keytool.1
+.\"
+.if n .pl 99999
+.TH keytool 1 "03 March 2015" "JDK 8" "Security Tools"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+
+.SH NAME
+keytool \- Manages a keystore (database) of cryptographic keys, X\&.509 certificate chains, and trusted certificates\&.
+.SH SYNOPSIS
+.sp
+.nf
+
+\fBkeytool\fR [\fIcommands\fR]
+.fi
+.sp
+.TP
+\fIcommands\fR
+See Commands\&. These commands are categorized by task as follows:
+.RS
+.TP 0.2i
+\(bu
+Create or Add Data to the Keystore
+.RS
+.TP 0.2i
+\(bu
+-gencert
+.TP 0.2i
+\(bu
+-genkeypair
+.TP 0.2i
+\(bu
+-genseckey
+.TP 0.2i
+\(bu
+-importcert
+.TP 0.2i
+\(bu
+-importpassword
+.RE
+
+.TP 0.2i
+\(bu
+Import Contents From Another Keystore
+.RS
+.TP 0.2i
+\(bu
+-importkeystore
+.RE
+
+.TP 0.2i
+\(bu
+Generate Certificate Request
+.RS
+.TP 0.2i
+\(bu
+-certreq
+.RE
+
+.TP 0.2i
+\(bu
+Export Data
+.RS
+.TP 0.2i
+\(bu
+-exportcert
+.RE
+
+.TP 0.2i
+\(bu
+Display Data
+.RS
+.TP 0.2i
+\(bu
+-list
+.TP 0.2i
+\(bu
+-printcert
+.TP 0.2i
+\(bu
+-printcertreq
+.TP 0.2i
+\(bu
+-printcrl
+.RE
+
+.TP 0.2i
+\(bu
+Manage the Keystore
+.RS
+.TP 0.2i
+\(bu
+-storepasswd
+.TP 0.2i
+\(bu
+-keypasswd
+.TP 0.2i
+\(bu
+-delete
+.TP 0.2i
+\(bu
+-changealias
+.RE
+
+.TP 0.2i
+\(bu
+Get Help
+.RS
+.TP 0.2i
+\(bu
+-help
+.RE
+
+.RE
+
+.SH DESCRIPTION
+The \f3keytool\fR command is a key and certificate management utility\&. It enables users to administer their own public/private key pairs and associated certificates for use in self-authentication (where the user authenticates himself or herself to other users and services) or data integrity and authentication services, using digital signatures\&. The \f3keytool\fR command also enables users to cache the public keys (in the form of certificates) of their communicating peers\&.
+.PP
+A certificate is a digitally signed statement from one entity (person, company, and so on\&.), that says that the public key (and some other information) of some other entity has a particular value\&. (See Certificate\&.) When data is digitally signed, the signature can be verified to check the data integrity and authenticity\&. Integrity means that the data has not been modified or tampered with, and authenticity means the data comes from whoever claims to have created and signed it\&.
+.PP
+The \f3keytool\fR command also enables users to administer secret keys and passphrases used in symmetric encryption and decryption (DES)\&.
+.PP
+The \f3keytool\fR command stores the keys and certificates in a keystore\&. See KeyStore aliases\&.
+.SH COMMAND\ AND\ OPTION\ NOTES
+See Commands for a listing and description of the various commands\&.
+.TP 0.2i
+\(bu
+All command and option names are preceded by a minus sign (-)\&.
+.TP 0.2i
+\(bu
+The options for each command can be provided in any order\&.
+.TP 0.2i
+\(bu
+All items not italicized or in braces or brackets are required to appear as is\&.
+.TP 0.2i
+\(bu
+Braces surrounding an option signify that a default value will be used when the option is not specified on the command line\&. See Option Defaults\&. Braces are also used around the \f3-v\fR, \f3-rfc\fR, and \f3-J\fR options, which only have meaning when they appear on the command line\&. They do not have any default values other than not existing\&.
+.TP 0.2i
+\(bu
+Brackets surrounding an option signify that the user is prompted for the values when the option is not specified on the command line\&. For the \f3-keypass\fR option, if you do not specify the option on the command line, then the \f3keytool\fR command first attempts to use the keystore password to recover the private/secret key\&. If this attempt fails, then the \f3keytool\fR command prompts you for the private/secret key password\&.
+.TP 0.2i
+\(bu
+Items in italics (option values) represent the actual values that must be supplied\&. For example, here is the format of the \f3-printcert\fR command:
+.sp
+.nf
+\f3keytool \-printcert {\-file \fIcert_file\fR} {\-v}\fP
+.fi
+.sp
+
+
+
+
+When you specify a \f3-printcert\fR command, replace \fIcert_file\fR with the actual file name, as follows: \f3keytool -printcert -file VScert\&.cer\fR
+.TP 0.2i
+\(bu
+Option values must be put in quotation marks when they contain a blank (space)\&.
+.TP 0.2i
+\(bu
+The \f3-help\fR option is the default\&. The \f3keytool\fR command is the same as \f3keytool -help\fR\&.
+.SH OPTION\ DEFAULTS
+The following examples show the defaults for various option values\&.
+.sp
+.nf
+\f3\-alias "mykey"\fP
+.fi
+.nf
+\f3\fP
+.fi
+.nf
+\f3\-keyalg\fP
+.fi
+.nf
+\f3 "DSA" (when using \-genkeypair)\fP
+.fi
+.nf
+\f3 "DES" (when using \-genseckey)\fP
+.fi
+.nf
+\f3\fP
+.fi
+.nf
+\f3\-keysize\fP
+.fi
+.nf
+\f3 2048 (when using \-genkeypair and \-keyalg is "RSA")\fP
+.fi
+.nf
+\f3 1024 (when using \-genkeypair and \-keyalg is "DSA")\fP
+.fi
+.nf
+\f3 256 (when using \-genkeypair and \-keyalg is "EC")\fP
+.fi
+.nf
+\f3 56 (when using \-genseckey and \-keyalg is "DES")\fP
+.fi
+.nf
+\f3 168 (when using \-genseckey and \-keyalg is "DESede")\fP
+.fi
+.nf
+\f3\fP
+.fi
+.nf
+\f3\-validity 90\fP
+.fi
+.nf
+\f3\fP
+.fi
+.nf
+\f3\-keystore \fP
+.fi
+.nf
+\f3\fP
+.fi
+.nf
+\f3\-storetype \fP
+.fi
+.nf
+\f3\fP
+.fi
+.nf
+\f3\-file\fP
+.fi
+.nf
+\f3 stdin (if reading)\fP
+.fi
+.nf
+\f3 stdout (if writing)\fP
+.fi
+.nf
+\f3\fP
+.fi
+.nf
+\f3\-protected false\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+In generating a public/private key pair, the signature algorithm (\f3-sigalg\fR option) is derived from the algorithm of the underlying private key:
+.TP 0.2i
+\(bu
+If the underlying private key is of type DSA, then the \f3-sigalg\fR option defaults to SHA1withDSA\&.
+.TP 0.2i
+\(bu
+If the underlying private key is of type RSA, then the \f3-sigalg\fR option defaults to SHA256withRSA\&.
+.TP 0.2i
+\(bu
+If the underlying private key is of type EC, then the \f3-sigalg\fR option defaults to SHA256withECDSA\&.
+.PP
+For a full list of \f3-keyalg\fR and \f3-sigalg\fR arguments, see Java Cryptography Architecture (JCA) Reference Guide at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/crypto/CryptoSpec\&.html#AppA
+.SH COMMON\ OPTIONS
+The \f3-v\fR option can appear for all commands except \f3-help\fR\&. When the \f3-v\fR option appears, it signifies verbose mode, which means that more information is provided in the output\&.
+.PP
+There is also a \f3-Jjavaoption\fR argument that can appear for any command\&. When the \f3-Jjavaoption\fR appears, the specified \f3javaoption\fR string is passed directly to the Java interpreter\&. This option does not contain any spaces\&. It is useful for adjusting the execution environment or memory usage\&. For a list of possible interpreter options, type \f3java -h\fR or \f3java -X\fR at the command line\&.
+.PP
+These options can appear for all commands operating on a keystore:
+.TP
+-storetype \fIstoretype\fR
+.br
+This qualifier specifies the type of keystore to be instantiated\&.
+.TP
+-keystore \fIkeystore\fR
+.br
+The keystore location\&.
+
+If the JKS \f3storetype\fR is used and a keystore file does not yet exist, then certain \f3keytool\fR commands can result in a new keystore file being created\&. For example, if \f3keytool -genkeypair\fR is called and the \f3-keystore\fR option is not specified, the default keystore file named \f3\&.keystore\fR in the user\&'s home directory is created when it does not already exist\&. Similarly, if the \f3-keystore ks_file\fR option is specified but ks_file does not exist, then it is created\&. For more information on the JKS \f3storetype\fR, see the \fIKeyStore Implementation\fR section in KeyStore aliases\&.
+
+Note that the input stream from the \f3-keystore\fR option is passed to the \f3KeyStore\&.load\fR method\&. If \f3NONE\fR is specified as the URL, then a null stream is passed to the \f3KeyStore\&.load\fR method\&. \f3NONE\fR should be specified if the keystore is not file-based\&. For example, when it resides on a hardware token device\&.
+.TP
+-storepass[:\fIenv\fR| :\fIfile\fR] argument
+.br
+The password that is used to protect the integrity of the keystore\&.
+
+If the modifier \f3env\fR or \f3file\fR is not specified, then the password has the \f3value\fR argument, which must be at least 6 characters long\&. Otherwise, the password is retrieved as follows:
+.RS
+.TP 0.2i
+\(bu
+\f3env\fR: Retrieve the password from the environment variable named \f3argument\fR\&.
+.TP 0.2i
+\(bu
+\f3file\fR: Retrieve the password from the file named argument\&.
+.RE
+
+
+\fINote:\fR All other options that require passwords, such as \f3-keypass\fR, \f3-srckeypass\fR, -\f3destkeypass\fR, \f3-srcstorepass\fR, and \f3-deststorepass\fR, accept the \fIenv\fR and \fIfile\fR modifiers\&. Remember to separate the password option and the modifier with a colon (:)\&.
+
+The password must be provided to all commands that access the keystore contents\&. For such commands, when the \f3-storepass\fR option is not provided at the command line, the user is prompted for it\&.
+
+When retrieving information from the keystore, the password is optional\&. If no password is specified, then the integrity of the retrieved information cannot be verified and a warning is displayed\&.
+.TP
+-providerName \fIprovider_name\fR
+.br
+Used to identify a cryptographic service provider\&'s name when listed in the security properties file\&.
+.TP
+-providerClass \fIprovider_class_name\fR
+.br
+Used to specify the name of a cryptographic service provider\&'s master class file when the service provider is not listed in the security properties file\&.
+.TP
+-providerArg \fIprovider_arg\fR
+.br
+Used with the \f3-providerClass\fR option to represent an optional string input argument for the constructor of \f3provider_class_name\fR\&.
+.TP
+-protected
+.br
+Either \f3true\fR or \f3false\fR\&. This value should be specified as \f3true\fR when a password must be specified by way of a protected authentication path such as a dedicated PIN reader\&.Because there are two keystores involved in the \f3-importkeystore\fR command, the following two options \f3-srcprotected\fR and -\f3destprotected\fR are provided for the source keystore and the destination keystore respectively\&.
+.TP
+-ext \fI{name{:critical} {=value}}\fR
+.br
+Denotes an X\&.509 certificate extension\&. The option can be used in \f3-genkeypair\fR and \f3-gencert\fR to embed extensions into the certificate generated, or in \f3-certreq\fR to show what extensions are requested in the certificate request\&. The option can appear multiple times\&. The \f3name\fR argument can be a supported extension name (see Named Extensions) or an arbitrary OID number\&. The \f3value\fR argument, when provided, denotes the argument for the extension\&. When \fIvalue\fR is omitted, that means that the default value of the extension or the extension requires no argument\&. The \f3:critical\fR modifier, when provided, means the extension\&'s \f3isCritical\fR attribute is \f3true\fR; otherwise, it is \f3false\fR\&. You can use \f3:c\fR in place of \f3:critical\fR\&.
+.SH NAMED\ EXTENSIONS
+The \f3keytool\fR command supports these named extensions\&. The names are not case-sensitive)\&.
+.TP
+BC or BasicContraints
+\fIValues\fR: The full form is: \f3ca:{true|false}[,pathlen:]\fR or \f3\fR, which is short for \f3ca:true,pathlen:\fR\&. When <\f3len\fR> is omitted, you have \f3ca:true\fR\&.
+.TP
+KU or KeyUsage
+\fIValues\fR: \f3usage\fR(,\f3usage\fR)*, where \fIusage\fR can be one of \f3digitalSignature\fR, \f3nonRepudiation\fR (contentCommitment), \f3keyEncipherment\fR, \f3dataEncipherment\fR, \f3keyAgreement\fR, \f3keyCertSign\fR, \f3cRLSign\fR, \f3encipherOnly\fR, \f3decipherOnly\fR\&. The \fIusage\fR argument can be abbreviated with the first few letters (\f3dig\fR for \f3digitalSignature\fR) or in camel-case style (\f3dS\fR for \f3digitalSignature\fR or \f3cRLS\fR for \f3cRLSign\fR), as long as no ambiguity is found\&. The \f3usage\fR values are case-sensitive\&.
+.TP
+EKU or ExtendedKeyUsage
+\fIValues\fR: \f3usage\fR(,\f3usage\fR)*, where \fIusage\fR can be one of \f3anyExtendedKeyUsage\fR, \f3serverAuth\fR, \f3clientAuth\fR, \f3codeSigning\fR, \f3emailProtection\fR, \f3timeStamping\fR, \f3OCSPSigning\fR, or any \fIOID string\fR\&. The \fIusage\fR argument can be abbreviated with the first few letters or in camel-case style, as long as no ambiguity is found\&. The \f3usage\fR values are case-sensitive\&.
+.TP
+SAN or SubjectAlternativeName
+\fIValues\fR: \f3type\fR:\f3value\fR(,t\f3ype:value\fR)*, where \f3type\fR can be \f3EMAIL\fR, \f3URI\fR, \f3DNS\fR, \f3IP\fR, or \f3OID\fR\&. The \f3value\fR argument is the string format value for the \f3type\fR\&.
+.TP
+IAN or IssuerAlternativeName
+\fIValues\fR: Same as \f3SubjectAlternativeName\fR\&.
+.TP
+SIA or SubjectInfoAccess
+\fIValues\fR: \f3method\fR:\f3location-type\fR:\f3location-value\fR (,\f3method:location-type\fR:\f3location-value\fR)*, where \f3method\fR can be \f3timeStamping\fR, \f3caRepository\fR or any OID\&. The \f3location-type\fR and \f3location-value\fR arguments can be any \f3type\fR:\f3value\fR supported by the \f3SubjectAlternativeName\fR extension\&.
+.TP
+AIA or AuthorityInfoAccess
+\fIValues\fR: Same as \f3SubjectInfoAccess\fR\&. The \f3method\fR argument can be \f3ocsp\fR,\f3caIssuers\fR, or any OID\&.
+.PP
+When \f3name\fR is OID, the value is the hexadecimal dumped DER encoding of the \f3extnValue\fR for the extension excluding the OCTET STRING type and length bytes\&. Any extra character other than standard hexadecimal numbers (0-9, a-f, A-F) are ignored in the HEX string\&. Therefore, both 01:02:03:04 and 01020304 are accepted as identical values\&. When there is no value, the extension has an empty value field\&.
+.PP
+A special name \f3honored\fR, used in \f3-gencert\fR only, denotes how the extensions included in the certificate request should be honored\&. The value for this name is a comma separated list of \f3all\fR (all requested extensions are honored), \f3name{:[critical|non-critical]}\fR (the named extension is honored, but using a different \f3isCritical\fR attribute) and \f3-name\fR (used with \f3all\fR, denotes an exception)\&. Requested extensions are not honored by default\&.
+.PP
+If, besides the\f3-ext honored\fR option, another named or OID \f3-ext\fR option is provided, this extension is added to those already honored\&. However, if this name (or OID) also appears in the honored value, then its value and criticality overrides the one in the request\&.
+.PP
+The \f3subjectKeyIdentifier\fR extension is always created\&. For non-self-signed certificates, the \f3authorityKeyIdentifier\fR is created\&.
+.PP
+\fINote:\fR Users should be aware that some combinations of extensions (and other certificate fields) may not conform to the Internet standard\&. See Certificate Conformance Warning\&.
+.SH COMMANDS
+.TP
+-gencert
+.sp
+.nf
+\f3{\-rfc} {\-infile \fIinfile\fR} {\-outfile \fIoutfile\fR} {\-alias \fIalias\fR} {\-sigalg \fIsigalg\fR}\fP
+.fi
+.sp
+.sp
+.nf
+\f3{\-dname \fIdname\fR} {\-startdate \fIstartdate\fR {\-ext \fIext\fR}* {\-validity \fIvalDays\fR}\fP
+.fi
+.sp
+.sp
+.nf
+\f3[\-keypass \fIkeypass\fR] {\-keystore \fIkeystore\fR} [\-storepass \fIstorepass\fR]\fP
+.fi
+.sp
+.sp
+.nf
+\f3{\-storetype \fIstoretype\fR} {\-providername \fIprovider_name\fR}\fP
+.fi
+.sp
+.sp
+.nf
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}}\fP
+.fi
+.sp
+.sp
+.nf
+\f3{\-v} {\-protected} {\-Jjavaoption}\fP
+.fi
+.sp
+
+
+Generates a certificate as a response to a certificate request file (which can be created by the \f3keytool\fR\f3-certreq\fR command)\&. The command reads the request from \fIinfile\fR (if omitted, from the standard input), signs it using alias\&'s private key, and outputs the X\&.509 certificate into \fIoutfile\fR (if omitted, to the standard output)\&. When\f3-rfc\fR is specified, the output format is Base64-encoded PEM; otherwise, a binary DER is created\&.
+
+The \f3sigalg\fR value specifies the algorithm that should be used to sign the certificate\&. The \f3startdate\fR argument is the start time and date that the certificate is valid\&. The \f3valDays\fR argument tells the number of days for which the certificate should be considered valid\&.
+
+When \f3dname\fR is provided, it is used as the subject of the generated certificate\&. Otherwise, the one from the certificate request is used\&.
+
+The \f3ext\fR value shows what X\&.509 extensions will be embedded in the certificate\&. Read Common Options for the grammar of \f3-ext\fR\&.
+
+The \f3-gencert\fR option enables you to create certificate chains\&. The following example creates a certificate, \f3e1\fR, that contains three certificates in its certificate chain\&.
+
+The following commands creates four key pairs named \f3ca\fR, \f3ca1\fR, \f3ca2\fR, and \f3e1\fR:
+.sp
+.nf
+\f3keytool \-alias ca \-dname CN=CA \-genkeypair\fP
+.fi
+.nf
+\f3keytool \-alias ca1 \-dname CN=CA \-genkeypair\fP
+.fi
+.nf
+\f3keytool \-alias ca2 \-dname CN=CA \-genkeypair\fP
+.fi
+.nf
+\f3keytool \-alias e1 \-dname CN=E1 \-genkeypair\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+
+
+The following two commands create a chain of signed certificates; \f3ca\fR signs \f3ca1\fR and \f3ca1\fR signs \f3ca2\fR, all of which are self-issued:
+.sp
+.nf
+\f3keytool \-alias ca1 \-certreq |\fP
+.fi
+.nf
+\f3 keytool \-alias ca \-gencert \-ext san=dns:ca1 |\fP
+.fi
+.nf
+\f3 keytool \-alias ca1 \-importcert\fP
+.fi
+.nf
+\f3\fP
+.fi
+.nf
+\f3keytool \-alias ca2 \-certreq |\fP
+.fi
+.nf
+\f3 $KT \-alias ca1 \-gencert \-ext san=dns:ca2 |\fP
+.fi
+.nf
+\f3 $KT \-alias ca2 \-importcert\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+
+
+The following command creates the certificate \f3e1\fR and stores it in the file \f3e1\&.cert\fR, which is signed by \f3ca2\fR\&. As a result, \f3e1\fR should contain \f3ca\fR, \f3ca1\fR, and \f3ca2\fR in its certificate chain:
+.sp
+.nf
+\f3keytool \-alias e1 \-certreq | keytool \-alias ca2 \-gencert > e1\&.cert\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+
+.TP
+-genkeypair
+.sp
+.nf
+\f3{\-alias \fIalias\fR} {\-keyalg \fIkeyalg\fR} {\-keysize \fIkeysize\fR} {\-sigalg \fIsigalg\fR}\fP
+.fi
+.sp
+.sp
+.nf
+\f3[\-dname \fIdname\fR] [\-keypass \fIkeypass\fR] {\-startdate \fIvalue\fR} {\-ext \fIext\fR}*\fP
+.fi
+.sp
+.sp
+.nf
+\f3{\-validity \fIvalDays\fR} {\-storetype \fIstoretype\fR} {\-keystore \fIkeystore\fR}\fP
+.fi
+.sp
+.sp
+.nf
+\f3[\-storepass \fIstorepass\fR]\fP
+.fi
+.sp
+.sp
+.nf
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}}\fP
+.fi
+.sp
+.sp
+.nf
+\f3{\-v} {\-protected} {\-Jjavaoption}\fP
+.fi
+.sp
+
+
+Generates a key pair (a public key and associated private key)\&. Wraps the public key into an X\&.509 v3 self-signed certificate, which is stored as a single-element certificate chain\&. This certificate chain and the private key are stored in a new keystore entry identified by alias\&.
+
+The \f3keyalg\fR value specifies the algorithm to be used to generate the key pair, and the \f3keysize\fR value specifies the size of each key to be generated\&. The \f3sigalg\fR value specifies the algorithm that should be used to sign the self-signed certificate\&. This algorithm must be compatible with the \f3keyalg\fR value\&.
+
+The \f3dname\fR value specifies the X\&.500 Distinguished Name to be associated with the value of \f3alias\fR, and is used as the issuer and subject fields in the self-signed certificate\&. If no distinguished name is provided at the command line, then the user is prompted for one\&.
+
+The value of \f3keypass\fR is a password used to protect the private key of the generated key pair\&. If no password is provided, then the user is prompted for it\&. If you press \fIthe Return key\fR at the prompt, then the key password is set to the same password as the keystore password\&. The \f3keypass\fR value must be at least 6 characters\&.
+
+The value of \f3startdate\fR specifies the issue time of the certificate, also known as the "Not Before" value of the X\&.509 certificate\&'s Validity field\&.
+
+The option value can be set in one of these two forms:
+
+\f3([+-]nnn[ymdHMS])+\fR
+
+\f3[yyyy/mm/dd] [HH:MM:SS]\fR
+
+With the first form, the issue time is shifted by the specified value from the current time\&. The value is a concatenation of a sequence of subvalues\&. Inside each subvalue, the plus sign (+) means shift forward, and the minus sign (-) means shift backward\&. The time to be shifted is \f3nnn\fR units of years, months, days, hours, minutes, or seconds (denoted by a single character of \f3y\fR, \f3m\fR, \f3d\fR, \f3H\fR, \f3M\fR, or \f3S\fR respectively)\&. The exact value of the issue time is calculated using the \f3java\&.util\&.GregorianCalendar\&.add(int field, int amount)\fR method on each subvalue, from left to right\&. For example, by specifying, the issue time will be:
+.sp
+.nf
+\f3Calendar c = new GregorianCalendar();\fP
+.fi
+.nf
+\f3c\&.add(Calendar\&.YEAR, \-1);\fP
+.fi
+.nf
+\f3c\&.add(Calendar\&.MONTH, 1);\fP
+.fi
+.nf
+\f3c\&.add(Calendar\&.DATE, \-1);\fP
+.fi
+.nf
+\f3return c\&.getTime()\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+
+
+With the second form, the user sets the exact issue time in two parts, year/month/day and hour:minute:second (using the local time zone)\&. The user can provide only one part, which means the other part is the same as the current date (or time)\&. The user must provide the exact number of digits as shown in the format definition (padding with 0 when shorter)\&. When both the date and time are provided, there is one (and only one) space character between the two parts\&. The hour should always be provided in 24 hour format\&.
+
+When the option is not provided, the start date is the current time\&. The option can be provided at most once\&.
+
+The value of \f3valDays\fR specifies the number of days (starting at the date specified by \f3-startdate\fR, or the current date when \f3-startdate\fR is not specified) for which the certificate should be considered valid\&.
+
+This command was named \f3-genkey\fR in earlier releases\&. The old name is still supported in this release\&. The new name, \f3-genkeypair\fR, is preferred going forward\&.
+.TP
+-genseckey
+.sp
+.nf
+\f3{\-alias \fIalias\fR} {\-keyalg \fIkeyalg\fR} {\-keysize \fIkeysize\fR} [\-keypass \fIkeypass\fR]\fP
+.fi
+.sp
+.sp
+.nf
+\f3{\-storetype \fIstoretype\fR} {\-keystore \fIkeystore\fR} [\-storepass \fIstorepass\fR]\fP
+.fi
+.sp
+.sp
+.nf
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}} {\-v}\fP
+.fi
+.sp
+.sp
+.nf
+\f3{\-protected} {\-Jjavaoption}\fP
+.fi
+.sp
+
+
+Generates a secret key and stores it in a new \f3KeyStore\&.SecretKeyEntry\fR identified by \f3alias\fR\&.
+
+The value of \f3keyalg\fR specifies the algorithm to be used to generate the secret key, and the value of \f3keysize\fR specifies the size of the key to be generated\&. The \f3keypass\fR value is a password that protects the secret key\&. If no password is provided, then the user is prompted for it\&. If you press the Return key at the prompt, then the key password is set to the same password that is used for the \f3keystore\fR\&. The \f3keypass\fR value must be at least 6 characters\&.
+.TP
+-importcert
+.sp
+.nf
+\f3{\-alias \fIalias\fR} {\-file \fIcert_file\fR} [\-keypass \fIkeypass\fR] {\-noprompt} {\-trustcacerts}\fP
+.fi
+.sp
+.sp
+.nf
+\f3{\-storetype \fIstoretype\fR} {\-keystore \fIkeystore\fR} [\-storepass \fIstorepass\fR]\fP
+.fi
+.sp
+.sp
+.nf
+\f3{\-providerName \fIprovider_name\fR}\fP
+.fi
+.sp
+.sp
+.nf
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}}\fP
+.fi
+.sp
+.sp
+.nf
+\f3{\-v} {\-protected} {\-Jjavaoption}\fP
+.fi
+.sp
+
+
+Reads the certificate or certificate chain (where the latter is supplied in a PKCS#7 formatted reply or a sequence of X\&.509 certificates) from the file \f3cert_file\fR, and stores it in the \f3keystore\fR entry identified by \f3alias\fR\&. If no file is specified, then the certificate or certificate chain is read from \f3stdin\fR\&.
+
+The \f3keytool\fR command can import X\&.509 v1, v2, and v3 certificates, and PKCS#7 formatted certificate chains consisting of certificates of that type\&. The data to be imported must be provided either in binary encoding format or in printable encoding format (also known as Base64 encoding) as defined by the Internet RFC 1421 standard\&. In the latter case, the encoding must be bounded at the beginning by a string that starts with \f3-\fR\f3----BEGIN\fR, and bounded at the end by a string that starts with \f3-----END\fR\&.
+
+You import a certificate for two reasons: To add it to the list of trusted certificates, and to import a certificate reply received from a certificate authority (CA) as the result of submitting a Certificate Signing Request to that CA (see the \f3-certreq\fR option in Commands)\&.
+
+Which type of import is intended is indicated by the value of the \f3-alias\fR option\&. If the alias does not point to a key entry, then the \f3keytool\fR command assumes you are adding a trusted certificate entry\&. In this case, the alias should not already exist in the keystore\&. If the alias does already exist, then the \f3keytool\fR command outputs an error because there is already a trusted certificate for that alias, and does not import the certificate\&. If the alias points to a key entry, then the \f3keytool\fR command assumes you are importing a certificate reply\&.
+.TP
+-importpassword
+.sp
+.nf
+\f3{\-alias \fIalias\fR} [\-keypass \fIkeypass\fR] {\-storetype \fIstoretype\fR} {\-keystore \fIkeystore\fR}\fP
+.fi
+.sp
+.sp
+.nf
+\f3[\-storepass \fIstorepass\fR]\fP
+.fi
+.sp
+.sp
+.nf
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}}\fP
+.fi
+.sp
+.sp
+.nf
+\f3{\-v} {\-protected} {\-Jjavaoption}\fP
+.fi
+.sp
+
+
+Imports a passphrase and stores it in a new \f3KeyStore\&.SecretKeyEntry\fR identified by \f3alias\fR\&. The passphrase may be supplied via the standard input stream; otherwise the user is prompted for it\&. \f3keypass\fR is a password used to protect the imported passphrase\&. If no password is provided, the user is prompted for it\&. If you press the Return key at the prompt, the key password is set to the same password as that used for the \f3keystore\fR\&. \f3keypass\fR must be at least 6 characters long\&.
+.TP
+-importkeystore
+.sp
+.nf
+\f3{\-srcstoretype \fIsrcstoretype\fR} {\-deststoretype \fIdeststoretype\fR}\fP
+.fi
+.sp
+.sp
+.nf
+\f3[\-srcstorepass \fIsrcstorepass\fR] [\-deststorepass \fIdeststorepass\fR] {\-srcprotected}\fP
+.fi
+.sp
+.sp
+.nf
+\f3{\-destprotected} \fP
+.fi
+.sp
+.sp
+.nf
+\f3{\-srcalias \fIsrcalias\fR {\-destalias \fIdestalias\fR} [\-srckeypass \fIsrckeypass\fR]} \fP
+.fi
+.sp
+.sp
+.nf
+\f3[\-destkeypass \fIdestkeypass\fR] {\-noprompt}\fP
+.fi
+.sp
+.sp
+.nf
+\f3{\-srcProviderName \fIsrc_provider_name\fR} {\-destProviderName \fIdest_provider_name\fR}\fP
+.fi
+.sp
+.sp
+.nf
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}} {\-v}\fP
+.fi
+.sp
+.sp
+.nf
+\f3{\-protected} {\-Jjavaoption}\fP
+.fi
+.sp
+
+
+Imports a single entry or all entries from a source keystore to a destination keystore\&.
+
+When the \f3-srcalias\fR option is provided, the command imports the single entry identified by the alias to the destination keystore\&. If a destination alias is not provided with \f3destalias\fR, then \f3srcalias\fR is used as the destination alias\&. If the source entry is protected by a password, then \f3srckeypass\fR is used to recover the entry\&. If \fIsrckeypass\fR is not provided, then the \f3keytool\fR command attempts to use \f3srcstorepass\fR to recover the entry\&. If \f3srcstorepass\fR is either not provided or is incorrect, then the user is prompted for a password\&. The destination entry is protected with \f3destkeypass\fR\&. If \f3destkeypass\fR is not provided, then the destination entry is protected with the source entry password\&. For example, most third-party tools require \f3storepass\fR and \f3keypass\fR in a PKCS #12 keystore to be the same\&. In order to create a PKCS #12 keystore for these tools, always specify a \f3-destkeypass\fR to be the same as \f3-deststorepass\fR\&.
+
+If the \f3-srcalias\fR option is not provided, then all entries in the source keystore are imported into the destination keystore\&. Each destination entry is stored under the alias from the source entry\&. If the source entry is protected by a password, then \f3srcstorepass\fR is used to recover the entry\&. If \f3srcstorepass\fR is either not provided or is incorrect, then the user is prompted for a password\&. If a source keystore entry type is not supported in the destination keystore, or if an error occurs while storing an entry into the destination keystore, then the user is prompted whether to skip the entry and continue or to quit\&. The destination entry is protected with the source entry password\&.
+
+If the destination alias already exists in the destination keystore, then the user is prompted to either overwrite the entry or to create a new entry under a different alias name\&.
+
+If the \f3-noprompt\fR option is provided, then the user is not prompted for a new destination alias\&. Existing entries are overwritten with the destination alias name\&. Entries that cannot be imported are skipped and a warning is displayed\&.
+.TP
+-printcertreq
+.sp
+.nf
+\f3{\-file \fIfile\fR}\fP
+.fi
+.sp
+
+
+Prints the content of a PKCS #10 format certificate request, which can be generated by the \f3keytool\fR\f3-certreq\fR command\&. The command reads the request from file\&. If there is no file, then the request is read from the standard input\&.
+.TP
+-certreq
+.sp
+.nf
+\f3{\-alias \fIalias\fR} {\-dname \fIdname\fR} {\-sigalg \fIsigalg\fR} {\-file \fIcertreq_file\fR}\fP
+.fi
+.sp
+.sp
+.nf
+\f3[\-keypass \fIkeypass\fR] {\-storetype \fIstoretype\fR} {\-keystore \fIkeystore\fR}\fP
+.fi
+.sp
+.sp
+.nf
+\f3[\-storepass \fIstorepass\fR] {\-providerName \fIprovider_name\fR}\fP
+.fi
+.sp
+.sp
+.nf
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}}\fP
+.fi
+.sp
+.sp
+.nf
+\f3{\-v} {\-protected} {\-Jjavaoption}\fP
+.fi
+.sp
+
+
+Generates a Certificate Signing Request (CSR) using the PKCS #10 format\&.
+
+A CSR is intended to be sent to a certificate authority (CA)\&. The CA authenticates the certificate requestor (usually off-line) and will return a certificate or certificate chain, used to replace the existing certificate chain (which initially consists of a self-signed certificate) in the keystore\&.
+
+The private key associated with alias is used to create the PKCS #10 certificate request\&. To access the private key, the correct password must be provided\&. If \f3keypass\fR is not provided at the command line and is different from the password used to protect the integrity of the keystore, then the user is prompted for it\&. If \f3dname\fR is provided, then it is used as the subject in the CSR\&. Otherwise, the X\&.500 Distinguished Name associated with alias is used\&.
+
+The \f3sigalg\fR value specifies the algorithm that should be used to sign the CSR\&.
+
+The CSR is stored in the file certreq_file\&. If no file is specified, then the CSR is output to \f3stdout\fR\&.
+
+Use the \f3importcert\fR command to import the response from the CA\&.
+.TP
+-exportcert
+.sp
+.nf
+\f3{\-alias \fIalias\fR} {\-file \fIcert_file\fR} {\-storetype \fIstoretype\fR} {\-keystore \fIkeystore\fR}\fP
+.fi
+.sp
+.sp
+.nf
+\f3[\-storepass \fIstorepass\fR] {\-providerName \fIprovider_name\fR}\fP
+.fi
+.sp
+.sp
+.nf
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}}\fP
+.fi
+.sp
+.sp
+.nf
+\f3{\-rfc} {\-v} {\-protected} {\-Jjavaoption}\fP
+.fi
+.sp
+
+
+Reads from the keystore the certificate associated with \fIalias\fR and stores it in the cert_file file\&. When no file is specified, the certificate is output to \f3stdout\fR\&.
+
+The certificate is by default output in binary encoding\&. If the \f3-rfc\fR option is specified, then the output in the printable encoding format defined by the Internet RFC 1421 Certificate Encoding Standard\&.
+
+If \f3alias\fR refers to a trusted certificate, then that certificate is output\&. Otherwise, \f3alias\fR refers to a key entry with an associated certificate chain\&. In that case, the first certificate in the chain is returned\&. This certificate authenticates the public key of the entity addressed by \f3alias\fR\&.
+
+This command was named \f3-export\fR in earlier releases\&. The old name is still supported in this release\&. The new name, \f3-exportcert\fR, is preferred going forward\&.
+.TP
+-list
+.sp
+.nf
+\f3{\-alias \fIalias\fR} {\-storetype \fIstoretype\fR} {\-keystore \fIkeystore\fR} [\-storepass \fIstorepass\fR]\fP
+.fi
+.sp
+.sp
+.nf
+\f3{\-providerName \fIprovider_name\fR}\fP
+.fi
+.sp
+.sp
+.nf
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}}\fP
+.fi
+.sp
+.sp
+.nf
+\f3{\-v | \-rfc} {\-protected} {\-Jjavaoption}\fP
+.fi
+.sp
+
+
+Prints to \f3stdout\fR the contents of the keystore entry identified by \f3alias\fR\&. If no \f3alias\fR is specified, then the contents of the entire keystore are printed\&.
+
+This command by default prints the SHA1 fingerprint of a certificate\&. If the \f3-v\fR option is specified, then the certificate is printed in human-readable format, with additional information such as the owner, issuer, serial number, and any extensions\&. If the \f3-rfc\fR option is specified, then the certificate contents are printed using the printable encoding format, as defined by the Internet RFC 1421 Certificate Encoding Standard\&.
+
+You cannot specify both \f3-v\fR and \f3-rfc\fR\&.
+.TP
+-printcert
+.sp
+.nf
+\f3{\-file \fIcert_file\fR | \-sslserver \fIhost\fR[:\fIport\fR]} {\-jarfile \fIJAR_file\fR {\-rfc} {\-v}\fP
+.fi
+.sp
+.sp
+.nf
+\f3{\-Jjavaoption}\fP
+.fi
+.sp
+
+
+Reads the certificate from the file cert_file, the SSL server located at host:port, or the signed JAR file \f3JAR_file\fR (with the \f3-jarfile\fR option and prints its contents in a human-readable format\&. When no port is specified, the standard HTTPS port 443 is assumed\&. Note that \f3-sslserver\fR and -file options cannot be provided at the same time\&. Otherwise, an error is reported\&. If neither option is specified, then the certificate is read from \f3stdin\fR\&.
+
+When\f3-rfc\fR is specified, the \f3keytool\fR command prints the certificate in PEM mode as defined by the Internet RFC 1421 Certificate Encoding standard\&. See Internet RFC 1421 Certificate Encoding Standard\&.
+
+If the certificate is read from a file or \f3stdin\fR, then it might be either binary encoded or in printable encoding format, as defined by the RFC 1421 Certificate Encoding standard\&.
+
+If the SSL server is behind a firewall, then the \f3-J-Dhttps\&.proxyHost=proxyhost\fR and \f3-J-Dhttps\&.proxyPort=proxyport\fR options can be specified on the command line for proxy tunneling\&. See Java Secure Socket Extension (JSSE) Reference Guide at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide\&.html
+
+\fINote:\fR This option can be used independently of a keystore\&.
+.TP
+-printcrl
+.sp
+.nf
+\f3\-file \fIcrl_\fR {\-v}\fP
+.fi
+.sp
+
+
+Reads the Certificate Revocation List (CRL) from the file \f3crl_\fR\&. A CRL is a list of digital certificates that were revoked by the CA that issued them\&. The CA generates the \f3crl_\fR file\&.
+
+\fINote:\fR This option can be used independently of a keystore\&.
+.TP
+-storepasswd
+.sp
+.nf
+\f3[\-new \fInew_storepass\fR] {\-storetype \fIstoretype\fR} {\-keystore \fIkeystore\fR}\fP
+.fi
+.sp
+.sp
+.nf
+\f3[\-storepass \fIstorepass\fR] {\-providerName \fIprovider_name\fR}\fP
+.fi
+.sp
+.sp
+.nf
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}}\fP
+.fi
+.sp
+.sp
+.nf
+\f3{\-v} {\-Jjavaoption}\fP
+.fi
+.sp
+
+
+Changes the password used to protect the integrity of the keystore contents\&. The new password is \f3new_storepass\fR, which must be at least 6 characters\&.
+.TP
+-keypasswd
+.sp
+.nf
+\f3{\-alias \fIalias\fR} [\-keypass \fIold_keypass\fR] [\-new \fInew_keypass\fR] {\-storetype \fIstoretype\fR}\fP
+.fi
+.sp
+.sp
+.nf
+\f3{\-keystore \fIkeystore\fR} [\-storepass \fIstorepass\fR] {\-providerName \fIprovider_name\fR}\fP
+.fi
+.sp
+.sp
+.nf
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}} {\-v}\fP
+.fi
+.sp
+.sp
+.nf
+\f3{\-Jjavaoption}\fP
+.fi
+.sp
+
+
+Changes the password under which the private/secret key identified by \f3alias\fR is protected, from \f3old_keypass\fR to \f3new_keypass\fR, which must be at least 6 characters\&.
+
+If the \f3-keypass\fR option is not provided at the command line, and the key password is different from the keystore password, then the user is prompted for it\&.
+
+If the \f3-new\fR option is not provided at the command line, then the user is prompted for it
+.TP
+-delete
+.sp
+.nf
+\f3[\-alias \fIalias\fR] {\-storetype \fIstoretype\fR} {\-keystore \fIkeystore\fR} [\-storepass \fIstorepass\fR]\fP
+.fi
+.sp
+.sp
+.nf
+\f3{\-providerName \fIprovider_name\fR} \fP
+.fi
+.sp
+.sp
+.nf
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}}\fP
+.fi
+.sp
+.sp
+.nf
+\f3{\-v} {\-protected} {\-Jjavaoption}\fP
+.fi
+.sp
+
+
+Deletes from the keystore the entry identified by \f3alias\fR\&. The user is prompted for the alias, when no alias is provided at the command line\&.
+.TP
+-changealias
+.sp
+.nf
+\f3{\-alias \fIalias\fR} [\-destalias \fIdestalias\fR] [\-keypass \fIkeypass\fR] {\-storetype \fIstoretype\fR}\fP
+.fi
+.sp
+.sp
+.nf
+\f3{\-keystore \fIkeystore\fR} [\-storepass \fIstorepass\fR] {\-providerName \fIprovider_name\fR}\fP
+.fi
+.sp
+.sp
+.nf
+\f3{\-providerClass \fIprovider_class_name\fR {\-providerArg \fIprovider_arg\fR}} {\-v}\fP
+.fi
+.sp
+.sp
+.nf
+\f3{\-protected} {\-Jjavaoption}\fP
+.fi
+.sp
+
+
+Move an existing keystore entry from the specified \f3alias\fR to a new alias, \f3destalias\fR\&. If no destination alias is provided, then the command prompts for one\&. If the original entry is protected with an entry password, then the password can be supplied with the \f3-keypass\fR option\&. If no key password is provided, then the \f3storepass\fR (if provided) is attempted first\&. If the attempt fails, then the user is prompted for a password\&.
+.TP
+-help
+.br
+Lists the basic commands and their options\&.
+
+For more information about a specific command, enter the following, where \f3command_name\fR is the name of the command: \f3keytool -command_name -help\fR\&.
+.SH EXAMPLES
+This example walks through the sequence of steps to create a keystore for managing public/private key pair and certificates from trusted entities\&.
+.SS GENERATE\ THE\ KEY\ PAIR
+First, create a keystore and generate the key pair\&. You can use a command such as the following typed as a single line:
+.sp
+.nf
+\f3keytool \-genkeypair \-dname "cn=Mark Jones, ou=Java, o=Oracle, c=US"\fP
+.fi
+.nf
+\f3 \-alias business \-keypass \fP
+.fi
+.nf
+\f3 \-keystore /working/mykeystore\fP
+.fi
+.nf
+\f3 \-storepass \-validity 180\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+The command creates the keystore named \f3mykeystore\fR in the working directory (assuming it does not already exist), and assigns it the password specified by \f3\fR\&. It generates a public/private key pair for the entity whose distinguished name has a common name of Mark Jones, organizational unit of Java, organization of Oracle and two-letter country code of US\&. It uses the default DSA key generation algorithm to create the keys; both are 1024 bits\&.
+.PP
+The command uses the default SHA1withDSA signature algorithm to create a self-signed certificate that includes the public key and the distinguished name information\&. The certificate is valid for 180 days, and is associated with the private key in a keystore entry referred to by the alias \f3business\fR\&. The private key is assigned the password specified by \f3\fR\&.
+.PP
+The command is significantly shorter when the option defaults are accepted\&. In this case, no options are required, and the defaults are used for unspecified options that have default values\&. You are prompted for any required values\&. You could have the following:
+.sp
+.nf
+\f3keytool \-genkeypair\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+In this case, a keystore entry with the alias \f3mykey\fR is created, with a newly generated key pair and a certificate that is valid for 90 days\&. This entry is placed in the keystore named \f3\&.keystore\fR in your home directory\&. The keystore is created when it does not already exist\&. You are prompted for the distinguished name information, the keystore password, and the private key password\&.
+.PP
+The rest of the examples assume you executed the \f3-genkeypair\fR command without options specified, and that you responded to the prompts with values equal to those specified in the first \f3-genkeypair\fR command\&. For example, a distinguished name of \f3cn=Mark Jones\fR, \f3ou=Java\fR, \f3o=Oracle\fR, \f3c=US\fR)\&.
+.SS REQUEST\ A\ SIGNED\ CERTIFICATE\ FROM\ A\ CA
+Generating the key pair created a self-signed certificate\&. A certificate is more likely to be trusted by others when it is signed by a Certification Authority (CA)\&. To get a CA signature, first generate a Certificate Signing Request (CSR), as follows:
+.sp
+.nf
+\f3keytool \-certreq \-file MarkJ\&.csr\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+This creates a CSR for the entity identified by the default alias \f3mykey\fR and puts the request in the file named MarkJ\&.csr\&. Submit this file to a CA, such as VeriSign\&. The CA authenticates you, the requestor (usually off-line), and returns a certificate, signed by them, authenticating your public key\&. In some cases, the CA returns a chain of certificates, each one authenticating the public key of the signer of the previous certificate in the chain\&.
+.SS IMPORT\ A\ CERTIFICATE\ FOR\ THE\ CA
+You now need to replace the self-signed certificate with a certificate chain, where each certificate in the chain authenticates the public key of the signer of the previous certificate in the chain, up to a root CA\&.
+.PP
+Before you import the certificate reply from a CA, you need one or more trusted certificates in your keystore or in the \f3cacerts\fR keystore file\&. See \f3-importcert\fR in Commands\&.
+.TP 0.2i
+\(bu
+If the certificate reply is a certificate chain, then you need the top certificate of the chain\&. The root CA certificate that authenticates the public key of the CA\&.
+.TP 0.2i
+\(bu
+If the certificate reply is a single certificate, then you need a certificate for the issuing CA (the one that signed it)\&. If that certificate is not self-signed, then you need a certificate for its signer, and so on, up to a self-signed root CA certificate\&.
+.PP
+The \f3cacerts\fR keystore file ships with several VeriSign root CA certificates, so you probably will not need to import a VeriSign certificate as a trusted certificate in your keystore\&. But if you request a signed certificate from a different CA, and a certificate authenticating that CA\&'s public key was not added to \f3cacerts\fR, then you must import a certificate from the CA as a trusted certificate\&.
+.PP
+A certificate from a CA is usually either self-signed or signed by another CA, in which case you need a certificate that authenticates that CA\&'s public key\&. Suppose company ABC, Inc\&., is a CA, and you obtain a file named A\f3BCCA\&.cer\fR that is supposed to be a self-signed certificate from ABC, that authenticates that CA\&'s public key\&. Be careful to ensure the certificate is valid before you import it as a trusted certificate\&. View it first with the \f3keytool -printcert\fR command or the \f3keytool -importcert\fR command without the \f3-noprompt\fR option, and make sure that the displayed certificate fingerprints match the expected ones\&. You can call the person who sent the certificate, and compare the fingerprints that you see with the ones that they show or that a secure public key repository shows\&. Only when the fingerprints are equal is it guaranteed that the certificate was not replaced in transit with somebody else\&'s (for example, an attacker\&'s) certificate\&. If such an attack takes place, and you did not check the certificate before you imported it, then you would be trusting anything the attacker has signed\&.
+.PP
+If you trust that the certificate is valid, then you can add it to your keystore with the following command:
+.sp
+.nf
+\f3keytool \-importcert \-alias abc \-file ABCCA\&.cer\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+This command creates a trusted certificate entry in the keystore, with the data from the file ABCCA\&.cer, and assigns the alias \f3abc\fR to the entry\&.
+.SS IMPORT\ THE\ CERTIFICATE\ REPLY\ FROM\ THE\ CA
+After you import a certificate that authenticates the public key of the CA you submitted your certificate signing request to (or there is already such a certificate in the cacerts file), you can import the certificate reply and replace your self-signed certificate with a certificate chain\&. This chain is the one returned by the CA in response to your request (when the CA reply is a chain), or one constructed (when the CA reply is a single certificate) using the certificate reply and trusted certificates that are already available in the keystore where you import the reply or in the \f3cacerts\fR keystore file\&.
+.PP
+For example, if you sent your certificate signing request to VeriSign, then you can import the reply with the following, which assumes the returned certificate is named VSMarkJ\&.cer:
+.sp
+.nf
+\f3keytool \-importcert \-trustcacerts \-file VSMarkJ\&.cer\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+.SS EXPORT\ A\ CERTIFICATE\ THAT\ AUTHENTICATES\ THE\ PUBLIC\ KEY
+If you used the \f3jarsigner\fR command to sign a Java Archive (JAR) file, then clients that want to use the file will want to authenticate your signature\&. One way the clients can authenticate you is by first importing your public key certificate into their keystore as a trusted entry\&.
+.PP
+You can export the certificate and supply it to your clients\&. As an example, you can copy your certificate to a file named MJ\&.cer with the following command that assumes the entry has an alias of \f3mykey\fR:
+.sp
+.nf
+\f3keytool \-exportcert \-alias mykey \-file MJ\&.cer\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+With the certificate and the signed JAR file, a client can use the \f3jarsigner\fR command to authenticate your signature\&.
+.SS IMPORT\ KEYSTORE
+The command \f3importkeystore\fR is used to import an entire keystore into another keystore, which means all entries from the source keystore, including keys and certificates, are all imported to the destination keystore within a single command\&. You can use this command to import entries from a different type of keystore\&. During the import, all new entries in the destination keystore will have the same alias names and protection passwords (for secret keys and private keys)\&. If the \f3keytool\fR command cannot recover the private keys or secret keys from the source keystore, then it prompts you for a password\&. If it detects alias duplication, then it asks you for a new alias, and you can specify a new alias or simply allow the \f3keytool\fR command to overwrite the existing one\&.
+.PP
+For example, to import entries from a typical JKS type keystore key\&.jks into a PKCS #11 type hardware-based keystore, use the command:
+.sp
+.nf
+\f3keytool \-importkeystore\fP
+.fi
+.nf
+\f3 \-srckeystore key\&.jks \-destkeystore NONE\fP
+.fi
+.nf
+\f3 \-srcstoretype JKS \-deststoretype PKCS11\fP
+.fi
+.nf
+\f3 \-srcstorepass \fP
+.fi
+.nf
+\f3 \-deststorepass \fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+The \f3importkeystore\fR command can also be used to import a single entry from a source keystore to a destination keystore\&. In this case, besides the options you see in the previous example, you need to specify the alias you want to import\&. With the \f3-srcalias\fR option specified, you can also specify the destination alias name in the command line, as well as protection password for a secret/private key and the destination protection password you want\&. The following command demonstrates this:
+.sp
+.nf
+\f3keytool \-importkeystore\fP
+.fi
+.nf
+\f3 \-srckeystore key\&.jks \-destkeystore NONE\fP
+.fi
+.nf
+\f3 \-srcstoretype JKS \-deststoretype PKCS11\fP
+.fi
+.nf
+\f3 \-srcstorepass \fP
+.fi
+.nf
+\f3 \-deststorepass \fP
+.fi
+.nf
+\f3 \-srcalias myprivatekey \-destalias myoldprivatekey\fP
+.fi
+.nf
+\f3 \-srckeypass \fP
+.fi
+.nf
+\f3 \-destkeypass \fP
+.fi
+.nf
+\f3 \-noprompt\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+.SS GENERATE\ CERTIFICATES\ FOR\ AN\ SSL\ SERVER
+The following are \f3keytool\fR commands to generate key pairs and certificates for three entities: Root CA (\f3root\fR), Intermediate CA (\f3ca\fR), and SSL server (\f3server\fR)\&. Ensure that you store all the certificates in the same keystore\&. In these examples, RSA is the recommended the key algorithm\&.
+.sp
+.nf
+\f3keytool \-genkeypair \-keystore root\&.jks \-alias root \-ext bc:c\fP
+.fi
+.nf
+\f3keytool \-genkeypair \-keystore ca\&.jks \-alias ca \-ext bc:c\fP
+.fi
+.nf
+\f3keytool \-genkeypair \-keystore server\&.jks \-alias server\fP
+.fi
+.nf
+\f3\fP
+.fi
+.nf
+\f3keytool \-keystore root\&.jks \-alias root \-exportcert \-rfc > root\&.pem\fP
+.fi
+.nf
+\f3\fP
+.fi
+.nf
+\f3keytool \-storepass \-keystore ca\&.jks \-certreq \-alias ca |\fP
+.fi
+.nf
+\f3 keytool \-storepass \-keystore root\&.jks\fP
+.fi
+.nf
+\f3 \-gencert \-alias root \-ext BC=0 \-rfc > ca\&.pem\fP
+.fi
+.nf
+\f3keytool \-keystore ca\&.jks \-importcert \-alias ca \-file ca\&.pem\fP
+.fi
+.nf
+\f3\fP
+.fi
+.nf
+\f3keytool \-storepass \-keystore server\&.jks \-certreq \-alias server |\fP
+.fi
+.nf
+\f3 keytool \-storepass \-keystore ca\&.jks \-gencert \-alias ca\fP
+.fi
+.nf
+\f3 \-ext ku:c=dig,kE \-rfc > server\&.pem\fP
+.fi
+.nf
+\f3cat root\&.pem ca\&.pem server\&.pem |\fP
+.fi
+.nf
+\f3 keytool \-keystore server\&.jks \-importcert \-alias server\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+.SH TERMS
+.TP
+Keystore
+A keystore is a storage facility for cryptographic keys and certificates\&.
+.TP
+Keystore entries
+Keystores can have different types of entries\&. The two most applicable entry types for the \f3keytool\fR command include the following:
+
+\fIKey entries\fR: Each entry holds very sensitive cryptographic key information, which is stored in a protected format to prevent unauthorized access\&. Typically, a key stored in this type of entry is a secret key, or a private key accompanied by the certificate chain for the corresponding public key\&. See Certificate Chains\&. The \f3keytool\fR command can handle both types of entries, while the \f3jarsigner\fR tool only handles the latter type of entry, that is private keys and their associated certificate chains\&.
+
+\fITrusted certificate entries\fR: Each entry contains a single public key certificate that belongs to another party\&. The entry is called a trusted certificate because the keystore owner trusts that the public key in the certificate belongs to the identity identified by the subject (owner) of the certificate\&. The issuer of the certificate vouches for this, by signing the certificate\&.
+.TP
+KeyStore aliases
+All keystore entries (key and trusted certificate entries) are accessed by way of unique aliases\&.
+
+An alias is specified when you add an entity to the keystore with the \f3-genseckey\fR command to generate a secret key, the \f3-genkeypair\fR command to generate a key pair (public and private key), or the \f3-importcert\fR command to add a certificate or certificate chain to the list of trusted certificates\&. Subsequent \f3keytool\fR commands must use this same alias to refer to the entity\&.
+
+For example, you can use the alias \f3duke\fR to generate a new public/private key pair and wrap the public key into a self-signed certificate with the following command\&. See Certificate Chains\&.
+.sp
+.nf
+\f3keytool \-genkeypair \-alias duke \-keypass dukekeypasswd\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+
+
+This example specifies an initial password of \f3dukekeypasswd\fR required by subsequent commands to access the private key associated with the alias \f3duke\fR\&. If you later want to change Duke\&'s private key password, use a command such as the following:
+.sp
+.nf
+\f3keytool \-keypasswd \-alias duke \-keypass dukekeypasswd \-new newpass\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+
+
+This changes the password from \f3dukekeypasswd\fR to \f3newpass\fR\&. A password should not be specified on a command line or in a script unless it is for testing purposes, or you are on a secure system\&. If you do not specify a required password option on a command line, then you are prompted for it\&.
+.TP
+KeyStore implementation
+The \f3KeyStore\fR class provided in the \f3java\&.security\fR package supplies well-defined interfaces to access and modify the information in a keystore\&. It is possible for there to be multiple different concrete implementations, where each implementation is that for a particular type of keystore\&.
+
+Currently, two command-line tools (\f3keytool\fR and \f3jarsigner\fR) and a GUI-based tool named Policy Tool make use of keystore implementations\&. Because the \f3KeyStore\fR class is \f3public\fR, users can write additional security applications that use it\&.
+
+There is a built-in default implementation, provided by Oracle\&. It implements the keystore as a file with a proprietary keystore type (format) named JKS\&. It protects each private key with its individual password, and also protects the integrity of the entire keystore with a (possibly different) password\&.
+
+Keystore implementations are provider-based\&. More specifically, the application interfaces supplied by \f3KeyStore\fR are implemented in terms of a Service Provider Interface (SPI)\&. That is, there is a corresponding abstract \f3KeystoreSpi\fR class, also in the \f3java\&.security package\fR, which defines the Service Provider Interface methods that providers must implement\&. The term \fIprovider\fR refers to a package or a set of packages that supply a concrete implementation of a subset of services that can be accessed by the Java Security API\&. To provide a keystore implementation, clients must implement a provider and supply a \f3KeystoreSpi\fR subclass implementation, as described in How to Implement a Provider in the Java Cryptography Architecture at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/crypto/HowToImplAProvider\&.html
+
+Applications can choose different types of keystore implementations from different providers, using the \f3getInstance\fR factory method supplied in the \f3KeyStore\fR class\&. A keystore type defines the storage and data format of the keystore information, and the algorithms used to protect private/secret keys in the keystore and the integrity of the keystore\&. Keystore implementations of different types are not compatible\&.
+
+The \f3keytool\fR command works on any file-based keystore implementation\&. It treats the keystore location that is passed to it at the command line as a file name and converts it to a \f3FileInputStream\fR, from which it loads the keystore information\&.)The \f3jarsigner\fR and \f3policytool\fR commands can read a keystore from any location that can be specified with a URL\&.
+
+For \f3keytool\fR and \f3jarsigner\fR, you can specify a keystore type at the command line, with the \f3-storetype\fR option\&. For Policy Tool, you can specify a keystore type with the \fIKeystore\fR menu\&.
+
+If you do not explicitly specify a keystore type, then the tools choose a keystore implementation based on the value of the \f3keystore\&.type\fR property specified in the security properties file\&. The security properties file is called \f3java\&.security\fR, and resides in the security properties directory, \f3java\&.home\elib\esecurity\fR on Windows and \f3java\&.home/lib/security\fR on Oracle Solaris, where \f3java\&.home\fR is the runtime environment directory\&. The \f3jre\fR directory in the SDK or the top-level directory of the Java Runtime Environment (JRE)\&.
+
+Each tool gets the \f3keystore\&.type\fR value and then examines all the currently installed providers until it finds one that implements a keystores of that type\&. It then uses the keystore implementation from that provider\&.The \f3KeyStore\fR class defines a static method named \f3getDefaultType\fR that lets applications and applets retrieve the value of the \f3keystore\&.type\fR property\&. The following line of code creates an instance of the default keystore type as specified in the \f3keystore\&.type\fR property:
+.sp
+.nf
+\f3KeyStore keyStore = KeyStore\&.getInstance(KeyStore\&.getDefaultType());\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+
+
+The default keystore type is \f3jks\fR, which is the proprietary type of the keystore implementation provided by Oracle\&. This is specified by the following line in the security properties file:
+.sp
+.nf
+\f3keystore\&.type=jks\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+
+
+To have the tools utilize a keystore implementation other than the default, you can change that line to specify a different keystore type\&. For example, if you have a provider package that supplies a keystore implementation for a keystore type called \f3pkcs12\fR, then change the line to the following:
+.sp
+.nf
+\f3keystore\&.type=pkcs12\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+
+
+\fINote:\fR Case does not matter in keystore type designations\&. For example, JKS would be considered the same as jks\&.
+.TP
+Certificate
+A certificate (or public-key certificate) is a digitally signed statement from one entity (the issuer), saying that the public key and some other information of another entity (the subject) has some specific value\&. The following terms are related to certificates:
+
+\fIPublic Keys\fR: These are numbers associated with a particular entity, and are intended to be known to everyone who needs to have trusted interactions with that entity\&. Public keys are used to verify signatures\&.
+
+\fIDigitally Signed\fR: If some data is digitally signed, then it is stored with the identity of an entity and a signature that proves that entity knows about the data\&. The data is rendered unforgeable by signing with the entity\&'s private key\&.
+
+\fIIdentity\fR: A known way of addressing an entity\&. In some systems, the identity is the public key, and in others it can be anything from an Oracle Solaris UID to an email address to an X\&.509 distinguished name\&.
+
+\fISignature\fR: A signature is computed over some data using the private key of an entity\&. The signer, which in the case of a certificate is also known as the issuer\&.
+
+\fIPrivate Keys\fR: These are numbers, each of which is supposed to be known only to the particular entity whose private key it is (that is, it is supposed to be kept secret)\&. Private and public keys exist in pairs in all public key cryptography systems (also referred to as public key crypto systems)\&. In a typical public key crypto system, such as DSA, a private key corresponds to exactly one public key\&. Private keys are used to compute signatures\&.
+
+\fIEntity\fR: An entity is a person, organization, program, computer, business, bank, or something else you are trusting to some degree\&.
+
+Public key cryptography requires access to users\&' public keys\&. In a large-scale networked environment, it is impossible to guarantee that prior relationships between communicating entities were established or that a trusted repository exists with all used public keys\&. Certificates were invented as a solution to this public key distribution problem\&. Now a Certification Authority (CA) can act as a trusted third party\&. CAs are entities such as businesses that are trusted to sign (issue) certificates for other entities\&. It is assumed that CAs only create valid and reliable certificates because they are bound by legal agreements\&. There are many public Certification Authorities, such as VeriSign, Thawte, Entrust, and so on\&.
+
+You can also run your own Certification Authority using products such as Microsoft Certificate Server or the Entrust CA product for your organization\&. With the \f3keytool\fR command, it is possible to display, import, and export certificates\&. It is also possible to generate self-signed certificates\&.
+
+The \f3keytool\fR command currently handles X\&.509 certificates\&.
+.TP
+X\&.509 Certificates
+The X\&.509 standard defines what information can go into a certificate and describes how to write it down (the data format)\&. All the data in a certificate is encoded with two related standards called ASN\&.1/DER\&. Abstract Syntax Notation 1 describes data\&. The Definite Encoding Rules describe a single way to store and transfer that data\&.
+
+All X\&.509 certificates have the following data, in addition to the signature:
+
+\fIVersion\fR: This identifies which version of the X\&.509 standard applies to this certificate, which affects what information can be specified in it\&. Thus far, three versions are defined\&. The \f3keytool\fR command can import and export v1, v2, and v3 certificates\&. It generates v3 certificates\&.
+
+X\&.509 Version 1 has been available since 1988, is widely deployed, and is the most generic\&.
+
+X\&.509 Version 2 introduced the concept of subject and issuer unique identifiers to handle the possibility of reuse of subject or issuer names over time\&. Most certificate profile documents strongly recommend that names not be reused and that certificates should not make use of unique identifiers\&. Version 2 certificates are not widely used\&.
+
+X\&.509 Version 3 is the most recent (1996) and supports the notion of extensions where anyone can define an extension and include it in the certificate\&. Some common extensions are: KeyUsage (limits the use of the keys to particular purposes such as \f3signing-only\fR) and AlternativeNames (allows other identities to also be associated with this public key, for example\&. DNS names, email addresses, IP addresses)\&. Extensions can be marked critical to indicate that the extension should be checked and enforced or used\&. For example, if a certificate has the KeyUsage extension marked critical and set to \f3keyCertSign\fR, then when this certificate is presented during SSL communication, it should be rejected because the certificate extension indicates that the associated private key should only be used for signing certificates and not for SSL use\&.
+
+\fISerial number\fR: The entity that created the certificate is responsible for assigning it a serial number to distinguish it from other certificates it issues\&. This information is used in numerous ways\&. For example, when a certificate is revoked its serial number is placed in a Certificate Revocation List (CRL)\&.
+
+\fISignature algorithm identifier\fR: This identifies the algorithm used by the CA to sign the certificate\&.
+
+\fIIssuer name\fR: The X\&.500 Distinguished Name of the entity that signed the certificate\&. See X\&.500 Distinguished Names\&. This is typically a CA\&. Using this certificate implies trusting the entity that signed this certificate\&. In some cases, such as root or top-level CA certificates, the issuer signs its own certificate\&.
+
+\fIValidity period\fR: Each certificate is valid only for a limited amount of time\&. This period is described by a start date and time and an end date and time, and can be as short as a few seconds or almost as long as a century\&. The validity period chosen depends on a number of factors, such as the strength of the private key used to sign the certificate, or the amount one is willing to pay for a certificate\&. This is the expected period that entities can rely on the public value, when the associated private key has not been compromised\&.
+
+\fISubject name\fR: The name of the entity whose public key the certificate identifies\&. This name uses the X\&.500 standard, so it is intended to be unique across the Internet\&. This is the X\&.500 Distinguished Name (DN) of the entity\&. See X\&.500 Distinguished Names\&. For example,
+.sp
+.nf
+\f3CN=Java Duke, OU=Java Software Division, O=Oracle Corporation, C=US\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+
+
+These refer to the subject\&'s common name (CN), organizational unit (OU), organization (O), and country (C)\&.
+
+\fISubject public key information\fR: This is the public key of the entity being named with an algorithm identifier that specifies which public key crypto system this key belongs to and any associated key parameters\&.
+.TP
+Certificate Chains
+The \f3keytool\fR command can create and manage keystore key entries that each contain a private key and an associated certificate chain\&. The first certificate in the chain contains the public key that corresponds to the private key\&.
+
+When keys are first generated, the chain starts off containing a single element, a self-signed certificate\&. See \f3-genkeypair\fR in Commands\&. A self-signed certificate is one for which the issuer (signer) is the same as the subject\&. The subject is the entity whose public key is being authenticated by the certificate\&. Whenever the \f3-genkeypair\fR command is called to generate a new public/private key pair, it also wraps the public key into a self-signed certificate\&.
+
+Later, after a Certificate Signing Request (CSR) was generated with the \f3-certreq\fR command and sent to a Certification Authority (CA), the response from the CA is imported with \f3-importcert\fR, and the self-signed certificate is replaced by a chain of certificates\&. See the \f3-certreq\fR and \f3-importcert\fR options in Commands\&. At the bottom of the chain is the certificate (reply) issued by the CA authenticating the subject\&'s public key\&. The next certificate in the chain is one that authenticates the CA\&'s public key\&.
+
+In many cases, this is a self-signed certificate, which is a certificate from the CA authenticating its own public key, and the last certificate in the chain\&. In other cases, the CA might return a chain of certificates\&. In this case, the bottom certificate in the chain is the same (a certificate signed by the CA, authenticating the public key of the key entry), but the second certificate in the chain is a certificate signed by a different CA that authenticates the public key of the CA you sent the CSR to\&. The next certificate in the chain is a certificate that authenticates the second CA\&'s key, and so on, until a self-signed root certificate is reached\&. Each certificate in the chain (after the first) authenticates the public key of the signer of the previous certificate in the chain\&.
+
+Many CAs only return the issued certificate, with no supporting chain, especially when there is a flat hierarchy (no intermediates CAs)\&. In this case, the certificate chain must be established from trusted certificate information already stored in the keystore\&.
+
+A different reply format (defined by the PKCS #7 standard) includes the supporting certificate chain in addition to the issued certificate\&. Both reply formats can be handled by the \f3keytool\fR command\&.
+
+The top-level (root) CA certificate is self-signed\&. However, the trust into the root\&'s public key does not come from the root certificate itself, but from other sources such as a newspaper\&. This is because anybody could generate a self-signed certificate with the distinguished name of, for example, the VeriSign root CA\&. The root CA public key is widely known\&. The only reason it is stored in a certificate is because this is the format understood by most tools, so the certificate in this case is only used as a vehicle to transport the root CA\&'s public key\&. Before you add the root CA certificate to your keystore, you should view it with the \f3-printcert\fR option and compare the displayed fingerprint with the well-known fingerprint obtained from a newspaper, the root CA\&'s Web page, and so on\&.
+.TP
+The cacerts Certificates File
+A certificates file named \f3cacerts\fR resides in the security properties directory, \f3java\&.home\elib\esecurity\fR on Windows and \f3java\&.home/lib/security\fR on Oracle Solaris, where \f3java\&.home\fR is the runtime environment\&'s directory, which would be the \f3jre\fR directory in the SDK or the top-level directory of the JRE\&.
+
+The \f3cacerts\fR file represents a system-wide keystore with CA certificates\&. System administrators can configure and manage that file with the \f3keytool\fR command by specifying \f3jks\fR as the keystore type\&. The \f3cacerts\fR keystore file ships with a default set of root CA certificates\&. You can list the default certificates with the following command:
+.sp
+.nf
+\f3keytool \-list \-keystore java\&.home/lib/security/cacerts\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+
+
+The initial password of the \f3cacerts\fR keystore file is \f3changeit\fR\&. System administrators should change that password and the default access permission of that file upon installing the SDK\&.
+
+\fINote:\fR It is important to verify your \f3cacerts\fR file\&. Because you trust the CAs in the \f3cacerts\fR file as entities for signing and issuing certificates to other entities, you must manage the \f3cacerts\fR file carefully\&. The \f3cacerts\fR file should contain only certificates of the CAs you trust\&. It is your responsibility to verify the trusted root CA certificates bundled in the \f3cacerts\fR file and make your own trust decisions\&.
+
+To remove an untrusted CA certificate from the \f3cacerts\fR file, use the \f3delete\fR option of the \f3keytool\fR command\&. You can find the \f3cacerts\fR file in the JRE installation directory\&. Contact your system administrator if you do not have permission to edit this file
+.TP
+Internet RFC 1421 Certificate Encoding Standard
+Certificates are often stored using the printable encoding format defined by the Internet RFC 1421 standard, instead of their binary encoding\&. This certificate format, also known as Base64 encoding, makes it easy to export certificates to other applications by email or through some other mechanism\&.
+
+Certificates read by the \f3-importcert\fR and \f3-printcert\fR commands can be in either this format or binary encoded\&. The \f3-exportcert\fR command by default outputs a certificate in binary encoding, but will instead output a certificate in the printable encoding format, when the \f3-rfc\fR option is specified\&.
+
+The \f3-list\fR command by default prints the SHA1 fingerprint of a certificate\&. If the \f3-v\fR option is specified, then the certificate is printed in human-readable format\&. If the \f3-rfc\fR option is specified, then the certificate is output in the printable encoding format\&.
+
+In its printable encoding format, the encoded certificate is bounded at the beginning and end by the following text:
+.sp
+.nf
+\f3\-\-\-\-\-BEGIN CERTIFICATE\-\-\-\-\-\fP
+.fi
+.nf
+\f3\fP
+.fi
+.nf
+\f3encoded certificate goes here\&. \fP
+.fi
+.nf
+\f3\fP
+.fi
+.nf
+\f3\-\-\-\-\-END CERTIFICATE\-\-\-\-\-\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+
+.TP
+X\&.500 Distinguished Names
+X\&.500 Distinguished Names are used to identify entities, such as those that are named by the \f3subject\fR and \f3issuer\fR (signer) fields of X\&.509 certificates\&. The \f3keytool\fR command supports the following subparts:
+
+\fIcommonName\fR: The common name of a person such as Susan Jones\&.
+
+\fIorganizationUnit\fR: The small organization (such as department or division) name\&. For example, Purchasing\&.
+
+\fIlocalityName\fR: The locality (city) name, for example, Palo Alto\&.
+
+\fIstateName\fR: State or province name, for example, California\&.
+
+\fIcountry\fR: Two-letter country code, for example, CH\&.
+
+When you supply a distinguished name string as the value of a \f3-dname\fR option, such as for the \f3-genkeypair\fR command, the string must be in the following format:
+.sp
+.nf
+\f3CN=cName, OU=orgUnit, O=org, L=city, S=state, C=countryCode\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+
+
+All the italicized items represent actual values and the previous keywords are abbreviations for the following:
+.sp
+.nf
+\f3CN=commonName\fP
+.fi
+.nf
+\f3OU=organizationUnit\fP
+.fi
+.nf
+\f3O=organizationName\fP
+.fi
+.nf
+\f3L=localityName\fP
+.fi
+.nf
+\f3S=stateName\fP
+.fi
+.nf
+\f3C=country\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+
+
+A sample distinguished name string is:
+.sp
+.nf
+\f3CN=Mark Smith, OU=Java, O=Oracle, L=Cupertino, S=California, C=US\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+
+
+A sample command using such a string is:
+.sp
+.nf
+\f3keytool \-genkeypair \-dname "CN=Mark Smith, OU=Java, O=Oracle, L=Cupertino,\fP
+.fi
+.nf
+\f3S=California, C=US" \-alias mark\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+
+
+Case does not matter for the keyword abbreviations\&. For example, CN, cn, and Cn are all treated the same\&.
+
+Order matters; each subcomponent must appear in the designated order\&. However, it is not necessary to have all the subcomponents\&. You can use a subset, for example:
+.sp
+.nf
+\f3CN=Steve Meier, OU=Java, O=Oracle, C=US\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+
+
+If a distinguished name string value contains a comma, then the comma must be escaped by a backslash (\e) character when you specify the string on a command line, as in:
+.sp
+.nf
+\f3cn=Peter Schuster, ou=Java\e, Product Development, o=Oracle, c=US\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+
+
+It is never necessary to specify a distinguished name string on a command line\&. When the distinguished name is needed for a command, but not supplied on the command line, the user is prompted for each of the subcomponents\&. In this case, a comma does not need to be escaped by a backslash (\e)\&.
+.SH WARNINGS
+.SS IMPORTING\ TRUSTED\ CERTIFICATES\ WARNING
+\fIImportant\fR: Be sure to check a certificate very carefully before importing it as a trusted certificate\&.
+.PP
+Windows Example:
+
+View the certificate first with the \f3-printcert\fR command or the \f3-importcert\fR command without the \f3-noprompt\fR option\&. Ensure that the displayed certificate fingerprints match the expected ones\&. For example, suppose sends or emails you a certificate that you put it in a file named \f3\etmp\ecert\fR\&. Before you consider adding the certificate to your list of trusted certificates, you can execute a \f3-printcert\fR command to view its fingerprints, as follows:
+.sp
+.nf
+\f3 keytool \-printcert \-file \etmp\ecert\fP
+.fi
+.nf
+\f3 Owner: CN=ll, OU=ll, O=ll, L=ll, S=ll, C=ll\fP
+.fi
+.nf
+\f3 Issuer: CN=ll, OU=ll, O=ll, L=ll, S=ll, C=ll\fP
+.fi
+.nf
+\f3 Serial Number: 59092b34\fP
+.fi
+.nf
+\f3 Valid from: Thu Sep 25 18:01:13 PDT 1997 until: Wed Dec 24 17:01:13 PST 1997\fP
+.fi
+.nf
+\f3 Certificate Fingerprints:\fP
+.fi
+.nf
+\f3 MD5: 11:81:AD:92:C8:E5:0E:A2:01:2E:D4:7A:D7:5F:07:6F\fP
+.fi
+.nf
+\f3 SHA1: 20:B6:17:FA:EF:E5:55:8A:D0:71:1F:E8:D6:9D:C0:37:13:0E:5E:FE\fP
+.fi
+.nf
+\f3 SHA256: 90:7B:70:0A:EA:DC:16:79:92:99:41:FF:8A:FE:EB:90:\fP
+.fi
+.nf
+\f3 17:75:E0:90:B2:24:4D:3A:2A:16:A6:E4:11:0F:67:A4\fP
+.fi
+.sp
+
+.PP
+Oracle Solaris Example:
+
+View the certificate first with the \f3-printcert\fR command or the \f3-importcert\fR command without the \f3-noprompt\fR option\&. Ensure that the displayed certificate fingerprints match the expected ones\&. For example, suppose someone sends or emails you a certificate that you put it in a file named \f3/tmp/cert\fR\&. Before you consider adding the certificate to your list of trusted certificates, you can execute a \f3-printcert\fR command to view its fingerprints, as follows:
+.sp
+.nf
+\f3 keytool \-printcert \-file /tmp/cert\fP
+.fi
+.nf
+\f3 Owner: CN=ll, OU=ll, O=ll, L=ll, S=ll, C=ll\fP
+.fi
+.nf
+\f3 Issuer: CN=ll, OU=ll, O=ll, L=ll, S=ll, C=ll\fP
+.fi
+.nf
+\f3 Serial Number: 59092b34\fP
+.fi
+.nf
+\f3 Valid from: Thu Sep 25 18:01:13 PDT 1997 until: Wed Dec 24 17:01:13 PST 1997\fP
+.fi
+.nf
+\f3 Certificate Fingerprints:\fP
+.fi
+.nf
+\f3 MD5: 11:81:AD:92:C8:E5:0E:A2:01:2E:D4:7A:D7:5F:07:6F\fP
+.fi
+.nf
+\f3 SHA1: 20:B6:17:FA:EF:E5:55:8A:D0:71:1F:E8:D6:9D:C0:37:13:0E:5E:FE\fP
+.fi
+.nf
+\f3 SHA256: 90:7B:70:0A:EA:DC:16:79:92:99:41:FF:8A:FE:EB:90:\fP
+.fi
+.nf
+\f3 17:75:E0:90:B2:24:4D:3A:2A:16:A6:E4:11:0F:67:A4\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+Then call or otherwise contact the person who sent the certificate and compare the fingerprints that you see with the ones that they show\&. Only when the fingerprints are equal is it guaranteed that the certificate was not replaced in transit with somebody else\&'s certificate such as an attacker\&'s certificate\&. If such an attack took place, and you did not check the certificate before you imported it, then you would be trusting anything the attacker signed, for example, a JAR file with malicious class files inside\&.
+.PP
+\fINote:\fR It is not required that you execute a \f3-printcert\fR command before importing a certificate\&. This is because before you add a certificate to the list of trusted certificates in the keystore, the \f3-importcert\fR command prints out the certificate information and prompts you to verify it\&. You can then stop the import operation\&. However, you can do this only when you call the \f3-importcert\fR command without the \f3-noprompt\fR option\&. If the \f3-noprompt\fR option is specified, then there is no interaction with the user\&.
+.SS PASSWORDS\ WARNING
+Most commands that operate on a keystore require the store password\&. Some commands require a private/secret key password\&. Passwords can be specified on the command line in the \f3-storepass\fR and \f3-keypass\fR options\&. However, a password should not be specified on a command line or in a script unless it is for testing, or you are on a secure system\&. When you do not specify a required password option on a command line, you are prompted for it\&.
+.SS CERTIFICATE\ CONFORMANCE\ WARNING
+The Internet standard RFC 5280 has defined a profile on conforming X\&.509 certificates, which includes what values and value combinations are valid for certificate fields and extensions\&. See the standard at http://tools\&.ietf\&.org/rfc/rfc5280\&.txt
+.PP
+The \f3keytool\fR command does not enforce all of these rules so it can generate certificates that do not conform to the standard\&. Certificates that do not conform to the standard might be rejected by JRE or other applications\&. Users should ensure that they provide the correct options for \f3-dname\fR, \f3-ext\fR, and so on\&.
+.SH NOTES
+.SS IMPORT\ A\ NEW\ TRUSTED\ CERTIFICATE
+Before you add the certificate to the keystore, the \f3keytool\fR command verifies it by attempting to construct a chain of trust from that certificate to a self-signed certificate (belonging to a root CA), using trusted certificates that are already available in the keystore\&.
+.PP
+If the \f3-trustcacerts\fR option was specified, then additional certificates are considered for the chain of trust, namely the certificates in a file named \f3cacerts\fR\&.
+.PP
+If the \f3keytool\fR command fails to establish a trust path from the certificate to be imported up to a self-signed certificate (either from the keystore or the \f3cacerts\fR file), then the certificate information is printed, and the user is prompted to verify it by comparing the displayed certificate fingerprints with the fingerprints obtained from some other (trusted) source of information, which might be the certificate owner\&. Be very careful to ensure the certificate is valid before importing it as a trusted certificate\&. See Importing Trusted Certificates Warning\&. The user then has the option of stopping the import operation\&. If the \f3-noprompt\fR option is specified, then there is no interaction with the user\&.
+.SS IMPORT\ A\ CERTIFICATE\ REPLY
+When you import a certificate reply, the certificate reply is validated with trusted certificates from the keystore, and optionally, the certificates configured in the \f3cacerts\fR keystore file when the \f3-trustcacert\fR\f3s\fR option is specified\&. See The cacerts Certificates File\&.
+.PP
+The methods of determining whether the certificate reply is trusted are as follows:
+.TP 0.2i
+\(bu
+If the reply is a single X\&.509 certificate, then the \f3keytool\fR command attempts to establish a trust chain, starting at the certificate reply and ending at a self-signed certificate (belonging to a root CA)\&. The certificate reply and the hierarchy of certificates is used to authenticate the certificate reply from the new certificate chain of aliases\&. If a trust chain cannot be established, then the certificate reply is not imported\&. In this case, the \f3keytool\fR command does not print the certificate and prompt the user to verify it, because it is very difficult for a user to determine the authenticity of the certificate reply\&.
+.TP 0.2i
+\(bu
+If the reply is a PKCS #7 formatted certificate chain or a sequence of X\&.509 certificates, then the chain is ordered with the user certificate first followed by zero or more CA certificates\&. If the chain ends with a self-signed root CA certificate and the\f3-trustcacerts\fR option was specified, the \f3keytool\fR command attempts to match it with any of the trusted certificates in the keystore or the \f3cacerts\fR keystore file\&. If the chain does not end with a self-signed root CA certificate and the \f3-trustcacerts\fR option was specified, the \f3keytool\fR command tries to find one from the trusted certificates in the keystore or the \f3cacerts\fR keystore file and add it to the end of the chain\&. If the certificate is not found and the \f3-noprompt\fR option is not specified, the information of the last certificate in the chain is printed, and the user is prompted to verify it\&.
+.PP
+If the public key in the certificate reply matches the user\&'s public key already stored with \f3alias\fR, then the old certificate chain is replaced with the new certificate chain in the reply\&. The old chain can only be replaced with a valid \f3keypass\fR, and so the password used to protect the private key of the entry is supplied\&. If no password is provided, and the private key password is different from the keystore password, the user is prompted for it\&.
+.PP
+This command was named \f3-import\fR in earlier releases\&. This old name is still supported in this release\&. The new name, \f3-importcert\fR, is preferred going forward\&.
+.SH SEE\ ALSO
+.TP 0.2i
+\(bu
+jar(1)
+.TP 0.2i
+\(bu
+jarsigner(1)
+.TP 0.2i
+\(bu
+Trail: Security Features in Java SE at http://docs\&.oracle\&.com/javase/tutorial/security/index\&.html
+.RE
+.br
+'pl 8.5i
+'bp
diff --git a/FCL/src/main/assets/java/man/man1/orbd.1 b/FCL/src/main/assets/java/man/man1/orbd.1
new file mode 100644
index 000000000..f4478eca1
--- /dev/null
+++ b/FCL/src/main/assets/java/man/man1/orbd.1
@@ -0,0 +1,213 @@
+'\" t
+.\" Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
+.\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+.\"
+.\" This code is free software; you can redistribute it and/or modify it
+.\" under the terms of the GNU General Public License version 2 only, as
+.\" published by the Free Software Foundation.
+.\"
+.\" This code 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
+.\" version 2 for more details (a copy is included in the LICENSE file that
+.\" accompanied this code).
+.\"
+.\" You should have received a copy of the GNU General Public License version
+.\" 2 along with this work; if not, write to the Free Software Foundation,
+.\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+.\"
+.\" Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+.\" or visit www.oracle.com if you need additional information or have any
+.\" questions.
+.\"
+.\" Arch: generic
+.\" Software: JDK 8
+.\" Date: 21 November 2013
+.\" SectDesc: Java IDL and RMI-IIOP Tools
+.\" Title: orbd.1
+.\"
+.if n .pl 99999
+.TH orbd 1 "21 November 2013" "JDK 8" "Java IDL and RMI-IIOP Tools"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+
+.SH NAME
+orbd \- Enables clients to locate and call persistent objects on servers in the CORBA environment\&.
+.SH SYNOPSIS
+.sp
+.nf
+
+\fBorbd\fR [ \fIoptions\fR ]
+.fi
+.sp
+.TP
+\fIoptions\fR
+Command-line options\&. See Options\&.
+.SH DESCRIPTION
+The \f3orbd\fR command enables clients to transparently locate and call persistent objects on servers in the CORBA environment\&. The Server Manager included with the orbd tool is used to enable clients to transparently locate and call persistent objects on servers in the CORBA environment\&. The persistent servers, while publishing the persistent object references in the naming service, include the port number of the ORBD in the object reference instead of the port number of the server\&. The inclusion of an ORBD port number in the object reference for persistent object references has the following advantages:
+.TP 0.2i
+\(bu
+The object reference in the naming service remains independent of the server life cycle\&. For example, the object reference could be published by the server in the Naming Service when it is first installed, and then, independent of how many times the server is started or shut down, the ORBD returns the correct object reference to the calling client\&.
+.TP 0.2i
+\(bu
+The client needs to look up the object reference in the naming service only once, and can keep reusing this reference independent of the changes introduced due to server life cycle\&.
+.PP
+To access the ORBD Server Manager, the server must be started using \f3servertool\fR, which is a command-line interface for application programmers to register, unregister, start up, and shut down a persistent server\&. For more information on the Server Manager, see Server Manager\&.
+.PP
+When \f3orbd\fR starts, it also starts a naming service\&. For more information about the naming service\&. See Start and Stop the Naming Service\&.
+.SH OPTIONS
+.TP
+-ORBInitialPort \fInameserverport\fR
+.br
+Required\&. Specifies the port on which the name server should be started\&. After it is started, \f3orbd\fR listens for incoming requests on this port\&. On Oracle Solaris software, you must become the root user to start a process on a port below 1024\&. For this reason, Oracle recommends that you use a port number above or equal to 1024\&.
+.SS NONREQUIRED\ OPTIONS
+.TP
+-port \fIport\fR
+.br
+Specifies the activation port where ORBD should be started, and where ORBD will be accepting requests for persistent objects\&. The default value for this port is 1049\&. This port number is added to the port field of the persistent Interoperable Object References (IOR)\&.
+.TP
+-defaultdb \fIdirectory\fR
+.br
+Specifies the base where the ORBD persistent storage directory, \f3orb\&.db\fR, is created\&. If this option is not specified, then the default value is \f3\&./orb\&.db\fR\&.
+.TP
+-serverPollingTime \fImilliseconds\fR
+.br
+Specifies how often ORBD checks for the health of persistent servers registered through \f3servertool\fR\&. The default value is 1000 ms\&. The value specified for \f3milliseconds\fR must be a valid positive integer\&.
+.TP
+-serverStartupDelay milliseconds
+.br
+Specifies how long ORBD waits before sending a location forward exception after a persistent server that is registered through \f3servertool\fR is restarted\&. The default value is 1000 ms\&. The value specified for \f3milliseconds\fR must be a valid positive integer\&.
+.TP
+-J\fIoption\fR
+.br
+Passes \f3option\fR to the Java Virtual Machine, where \f3option\fR is one of the options described on the reference page for the Java application launcher\&. For example, \f3-J-Xms48m\fR sets the startup memory to 48 MB\&. See java(1)\&.
+.SS START\ AND\ STOP\ THE\ NAMING\ SERVICE
+A naming service is a CORBA service that allows CORBA objects to be named by means of binding a name to an object reference\&. The name binding can be stored in the naming service, and a client can supply the name to obtain the desired object reference\&.
+.PP
+Before running a client or a server, you will start ORBD\&. ORBD includes a persistent naming service and a transient naming service, both of which are an implementation of the COS Naming Service\&.
+.PP
+The Persistent Naming Service provides persistence for naming contexts\&. This means that this information is persistent across service shutdowns and startups, and is recoverable in the event of a service failure\&. If ORBD is restarted, then the Persistent Naming Service restores the naming context graph, so that the binding of all clients\&' and servers\&' names remains intact (persistent)\&.
+.PP
+For backward compatibility, \f3tnameserv\fR, a Transient Naming Service that shipped with earlier releases of the JDK, is also included in this release of Java SE\&. A transient naming service retains naming contexts as long as it is running\&. If there is a service interruption, then the naming context graph is lost\&.
+.PP
+The \f3-ORBInitialPort\fR argument is a required command-line argument for \f3orbd\fR, and is used to set the port number on which the naming service runs\&. The following instructions assume you can use port 1050 for the Java IDL Object Request Broker Daemon\&. When using Oracle Solaris software, you must become a root user to start a process on a port lower than 1024\&. For this reason, it is recommended that you use a port number above or equal to 1024\&. You can substitute a different port when necessary\&.
+.PP
+To start \f3orbd\fR from a UNIX command shell, enter:
+.sp
+.nf
+\f3orbd \-ORBInitialPort 1050&\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+From an MS-DOS system prompt (Windows), enter:
+.sp
+.nf
+\f3start orbd \-ORBInitialPort 1050\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+Now that ORBD is running, you can run your server and client applications\&. When running the client and server applications, they must be made aware of the port number (and machine name, when applicable) where the Naming Service is running\&. One way to do this is to add the following code to your application:
+.sp
+.nf
+\f3Properties props = new Properties();\fP
+.fi
+.nf
+\f3props\&.put("org\&.omg\&.CORBA\&.ORBInitialPort", "1050");\fP
+.fi
+.nf
+\f3props\&.put("org\&.omg\&.CORBA\&.ORBInitialHost", "MyHost");\fP
+.fi
+.nf
+\f3ORB orb = ORB\&.init(args, props);\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+In this example, the naming service is running on port 1050 on host \f3MyHost\fR\&. Another way is to specify the port number and/or machine name when running the server or client application from the command line\&. For example, you would start your \f3HelloApplication\fR with the following command line:
+.sp
+.nf
+\f3java HelloApplication \-ORBInitialPort 1050 \-ORBInitialHost MyHost\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+To stop the naming service, use the relevant operating system command, such as \f3pkill\fR\f3orbd\fR on Oracle Solaris, or \fICtrl+C\fR in the DOS window in which \f3orbd\fR is running\&. Note that names registered with the naming service can disappear when the service is terminated because of a transient naming service\&. The Java IDL naming service will run until it is explicitly stopped\&.
+.PP
+For more information about the naming service included with ORBD, see Naming Service at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/idl/jidlNaming\&.html
+.SH SERVER\ MANAGER
+To access the ORBD Server Manager and run a persistent server, the server must be started with \f3servertool\fR, which is a command-line interface for application programmers to register, unregister, start up, and shut down a persistent server\&. When a server is started using \f3servertool\fR, it must be started on the same host and port on which \f3orbd\fR is executing\&. If the server is run on a different port, then the information stored in the database for local contexts will be invalid and the service will not work properly\&.
+.PP
+See Java IDL: The "Hello World" Example at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/idl/jidlExample\&.html
+.PP
+In this example, you run the \f3idlj\fR compiler and \f3javac\fR compiler as shown in the tutorial\&. To run the ORBD Server Manager, follow these steps for running the application:
+.PP
+Start \f3orbd\fR\&.
+.PP
+UNIX command shell, enter: \f3orbd -ORBInitialPort 1050\fR\&.
+.PP
+MS-DOS system prompt (Windows), enter: \f3s\fR\f3tart orbd -ORBInitialPort 105\fR\f30\fR\&.
+.PP
+Port 1050 is the port on which you want the name server to run\&. The \f3-ORBInitialPort\fR option is a required command-line argument\&. When using Oracle Solaris software, you must become a root user to start a process on a port below 1024\&. For this reason, it is recommended that you use a port number above or equal to 1024\&.
+.PP
+Start the \f3servertool\fR: \f3servertool -ORBInitialPort 1050\fR\&.
+.PP
+Make sure the name server (\f3orbd\fR) port is the same as in the previous step, for example, \f3-ORBInitialPort 1050\&.\fR The \f3servertool\fR must be started on the same port as the name server\&.
+.PP
+In the \f3servertool\fR command line interface, start the \f3Hello\fR server from the \f3servertool\fR prompt:
+.sp
+.nf
+\f3servertool > register \-server HelloServer \-classpath \&. \-applicationName\fP
+.fi
+.nf
+\f3 HelloServerApName\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+The \f3servertool\fR registers the server, assigns it the name \f3HelloServerApName\fR, and displays its server ID with a listing of all registered servers\&.Run the client application from another terminal window or prompt:
+.sp
+.nf
+\f3java HelloClient \-ORBInitialPort 1050 \-ORBInitialHost localhost\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+For this example, you can omit \f3-ORBInitialHost localhost\fR because the name server is running on the same host as the \f3Hello\fR client\&. If the name server is running on a different host, then use the -\f3ORBInitialHost nameserverhost\fR option to specify the host on which the IDL name server is running\&.Specify the name server (\f3orbd\fR) port as done in the previous step, for example, \f3-ORBInitialPort 1050\fR\&. When you finish experimenting with the ORBD Server Manager, be sure to shut down or terminate the name server (\f3orbd\fR) and \f3servertool\fR\&. To shut down \f3orbd\fR from am MS-DOS prompt, select the window that is running the server and enter \fICtrl+C\fR to shut it down\&.
+.PP
+To shut down \f3orbd\fR from an Oracle Solaris shell, find the process, and terminate with the \f3kill\fR command\&. The server continues to wait for invocations until it is explicitly stopped\&. To shut down the \f3servertool\fR, type \fIquit\fR and press the \fIEnter\fR key\&.
+.SH SEE\ ALSO
+.TP 0.2i
+\(bu
+servertool(1)
+.TP 0.2i
+\(bu
+Naming Service at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/idl/jidlNaming\&.html
+.RE
+.br
+'pl 8.5i
+'bp
diff --git a/FCL/src/main/assets/java/man/man1/pack200.1 b/FCL/src/main/assets/java/man/man1/pack200.1
new file mode 100644
index 000000000..667d367b3
--- /dev/null
+++ b/FCL/src/main/assets/java/man/man1/pack200.1
@@ -0,0 +1,290 @@
+'\" t
+.\" Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved.
+.\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+.\"
+.\" This code is free software; you can redistribute it and/or modify it
+.\" under the terms of the GNU General Public License version 2 only, as
+.\" published by the Free Software Foundation.
+.\"
+.\" This code 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
+.\" version 2 for more details (a copy is included in the LICENSE file that
+.\" accompanied this code).
+.\"
+.\" You should have received a copy of the GNU General Public License version
+.\" 2 along with this work; if not, write to the Free Software Foundation,
+.\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+.\"
+.\" Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+.\" or visit www.oracle.com if you need additional information or have any
+.\" questions.
+.\"
+.\" Arch: generic
+.\" Software: JDK 8
+.\" Date: 21 November 2013
+.\" SectDesc: Java Deployment Tools
+.\" Title: pack200.1
+.\"
+.if n .pl 99999
+.TH pack200 1 "21 November 2013" "JDK 8" "Java Deployment Tools"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+
+.SH NAME
+pack200 \- Packages a JAR file into a compressed pack200 file for web deployment\&.
+.SH SYNOPSIS
+.sp
+.nf
+
+\fBpack200\fR [\fIoptions\fR] \fIoutput\-file\fR \fIJAR\-file\fR
+.fi
+.sp
+Options can be in any order\&. The last option on the command line or in a properties file supersedes all previously specified options\&.
+.TP
+\fIoptions\fR
+The command-line options\&. See Options\&.
+.TP
+\fIoutput-file\fR
+Name of the output file\&.
+.TP
+\fIJAR-file\fR
+Name of the input file\&.
+.SH DESCRIPTION
+The \f3pack200\fR command is a Java application that transforms a JAR file into a compressed pack200 file with the Java gzip compressor\&. The pack200 files are highly compressed files that can be directly deployed to save bandwidth and reduce download time\&.
+.PP
+The \f3pack200\fR command has several options to fine-tune and set the compression engine\&. The typical usage is shown in the following example, where \f3myarchive\&.pack\&.gz\fR is produced with the default \f3pack200\fR command settings:
+.sp
+.nf
+\f3pack200 myarchive\&.pack\&.gz myarchive\&.jar\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+.SH OPTIONS
+.TP
+-r, --repack
+.br
+Produces a JAR file by packing and unpacking a JAR file\&. The resulting file can be used as an input to the \f3jarsigner\fR(1) tool\&. The following example packs and unpacks the myarchive\&.jar file:
+.sp
+.nf
+\f3pack200 \-\-repack myarchive\-packer\&.jar myarchive\&.jar\fP
+.fi
+.nf
+\f3pack200 \-\-repack myarchive\&.jar\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+
+
+The following example preserves the order of files in the input file\&.
+.TP
+-g, --no-gzip
+.br
+Produces a \f3pack200\fR file\&. With this option, a suitable compressor must be used, and the target system must use a corresponding decompresser\&.
+.sp
+.nf
+\f3pack200 \-\-no\-gzip myarchive\&.pack myarchive\&.jar\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+
+.TP
+-G, --strip-debug
+.br
+Strips debugging attributes from the output\&. These include \f3SourceFile\fR, \f3LineNumberTable\fR, \f3LocalVariableTable\fR and \f3LocalVariableTypeTable\fR\&. Removing these attributes reduces the size of both downloads and installations, but reduces the usefulness of debuggers\&.
+.TP
+--keep-file-order
+.br
+Preserve the order of files in the input file\&. This is the default behavior\&.
+.TP
+-O, --no-keep-file-order
+.br
+The packer reorders and transmits all elements\&. The packer can also remove JAR directory names to reduce the download size\&. However, certain JAR file optimizations, such as indexing, might not work correctly\&.
+.TP
+-S\fIvalue\fR , --segment-limit=\fIvalue\fR
+.br
+The value is the estimated target size \fIN\fR (in bytes) of each archive segment\&. If a single input file requires more than \fIN\fR bytes, then its own archive segment is provided\&. As a special case, a value of \f3-1\fR produces a single large segment with all input files, while a value of 0 produces one segment for each class\&. Larger archive segments result in less fragmentation and better compression, but processing them requires more memory\&.
+
+The size of each segment is estimated by counting the size of each input file to be transmitted in the segment with the size of its name and other transmitted properties\&.
+
+The default is -1, which means that the packer creates a single segment output file\&. In cases where extremely large output files are generated, users are strongly encouraged to use segmenting or break up the input file into smaller JARs\&.
+
+A 10 MB JAR packed without this limit typically packs about 10 percent smaller, but the packer might require a larger Java heap (about 10 times the segment limit)\&.
+.TP
+-E\fIvalue\fR , --effort=\fIvalue\fR
+.br
+If the value is set to a single decimal digit, then the packer uses the indicated amount of effort in compressing the archive\&. Level 1 might produce somewhat larger size and faster compression speed, while level 9 takes much longer, but can produce better compression\&. The special value 0 instructs the \f3pack200\fR command to copy through the original JAR file directly with no compression\&. The JSR 200 standard requires any unpacker to understand this special case as a pass-through of the entire archive\&.
+
+The default is 5, to invest a modest amount of time to produce reasonable compression\&.
+.TP
+-H\fIvalue\fR , --deflate-hint=\fIvalue\fR
+.br
+Overrides the default, which preserves the input information, but can cause the transmitted archive to be larger\&. The possible values are: \f3true\fR, \f3false\fR, or \f3keep\fR\&.
+
+If the \f3value\fR is \f3true\fR or false, then the \f3packer200\fR command sets the deflation hint accordingly in the output archive and does not transmit the individual deflation hints of archive elements\&.
+
+The \f3keep\fR value preserves deflation hints observed in the input JAR\&. This is the default\&.
+.TP
+-m\fIvalue\fR , --modification-time=\fIvalue\fR
+.br
+The possible values are \f3latest\fR and \f3keep\fR\&.
+
+If the value is latest, then the packer attempts to determine the latest modification time, among all the available entries in the original archive, or the latest modification time of all the available entries in that segment\&. This single value is transmitted as part of the segment and applied to all the entries in each segment\&. This can marginally decrease the transmitted size of the archive at the expense of setting all installed files to a single date\&.
+
+If the value is \f3keep\fR, then modification times observed in the input JAR are preserved\&. This is the default\&.
+.TP
+-P\fIfile\fR , --pass-file=\fIfile\fR
+.br
+Indicates that a file should be passed through bytewise with no compression\&. By repeating the option, multiple files can be specified\&. There is no pathname transformation, except that the system file separator is replaced by the JAR file separator forward slash (/)\&. The resulting file names must match exactly as strings with their occurrences in the JAR file\&. If \f3file\fR is a directory name, then all files under that directory are passed\&.
+.TP
+-U\fIaction\fR , --unknown-attribute=\fIaction\fR
+.br
+Overrides the default behavior, which means that the class file that contains the unknown attribute is passed through with the specified \f3action\fR\&. The possible values for actions are \f3error\fR, \f3strip\fR, or \f3pass\fR\&.
+
+If the value is \f3error\fR, then the entire \f3pack200\fR command operation fails with a suitable explanation\&.
+
+If the value is \f3strip\fR, then the attribute is dropped\&. Removing the required Java Virtual Machine (JVM) attributes can cause class loader failures\&.
+
+If the value is \f3pass\fR, then the entire class is transmitted as though it is a resource\&.
+.TP
+.nf
+-C\fIattribute-name\fR=\fIlayout\fR , --class-attribute=\fIattribute-name\fR=\fIaction\fR
+.br
+.fi
+See next option\&.
+.TP
+.nf
+-F\fIattribute-name\fR=\fIlayout\fR , --field-attribute=\fIattribute-name\fR=\fIaction\fR
+.br
+.fi
+See next option\&.
+.TP
+.nf
+-M\fIattribute-name\fR=\fIlayout\fR , --method-attribute=\fIattribute-name\fR=\fIaction\fR
+.br
+.fi
+See next option\&.
+.TP
+.nf
+-D\fIattribute-name\fR=\fIlayout\fR , --code-attribute=\fIattribute-name\fR=\fIaction\fR
+.br
+.fi
+With the previous four options, the attribute layout can be specified for a class entity, such as \f3class-attribute\fR, \f3field-attribute\fR, \f3method-attribute\fR, and \f3code-attribute\fR\&. The \fIattribute-name\fR is the name of the attribute for which the layout or action is being defined\&. The possible values for \fIaction\fR are \f3some-layout-string\fR, \f3error\fR, \f3strip\fR, \f3pass\fR\&.
+
+\f3some-layout-string\fR: The layout language is defined in the JSR 200 specification, for example: \f3--class-attribute=SourceFile=RUH\fR\&.
+
+If the value is \f3error\fR, then the \f3pack200\fR operation fails with an explanation\&.
+
+If the value is \f3strip\fR, then the attribute is removed from the output\&. Removing JVM-required attributes can cause class loader failures\&. For example, \f3--class-attribute=CompilationID=pass\fR causes the class file that contains this attribute to be passed through without further action by the packer\&.
+
+If the value is \f3pass\fR, then the entire class is transmitted as though it is a resource\&.
+.TP
+-f \fIpack\&.properties\fR , --config-file=\fIpack\&.properties\fR
+.br
+A configuration file, containing Java properties to initialize the packer, can be specified on the command line\&.
+.sp
+.nf
+\f3pack200 \-f pack\&.properties myarchive\&.pack\&.gz myarchive\&.jar\fP
+.fi
+.nf
+\f3more pack\&.properties\fP
+.fi
+.nf
+\f3# Generic properties for the packer\&.\fP
+.fi
+.nf
+\f3modification\&.time=latest\fP
+.fi
+.nf
+\f3deflate\&.hint=false\fP
+.fi
+.nf
+\f3keep\&.file\&.order=false\fP
+.fi
+.nf
+\f3# This option will cause the files bearing new attributes to\fP
+.fi
+.nf
+\f3# be reported as an error rather than passed uncompressed\&.\fP
+.fi
+.nf
+\f3unknown\&.attribute=error\fP
+.fi
+.nf
+\f3# Change the segment limit to be unlimited\&.\fP
+.fi
+.nf
+\f3segment\&.limit=\-1\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+
+.TP
+-v, --verbose
+.br
+Outputs minimal messages\&. Multiple specification of this option will create more verbose messages\&.
+.TP
+-q, --quiet
+.br
+Specifies quiet operation with no messages\&.
+.TP
+-l\fIfilename\fR , --log-file=\fIfilename\fR
+.br
+Specifies a log file to output messages\&.
+.TP
+-?, -h, --help
+.br
+Prints help information about this command\&.
+.TP
+-V, --version
+.br
+Prints version information about this command\&.
+.TP
+-J\fIoption\fR
+.br
+Passes the specified option to the Java Virtual Machine\&. For more information, see the reference page for the java(1) command\&. For example, \f3-J-Xms48m\fR sets the startup memory to 48 MB\&.
+.SH EXIT\ STATUS
+The following exit values are returned: 0 for successful completion and a number greater than 0 when an error occurs\&.
+.SH NOTES
+This command should not be confused with \f3pack\fR(1)\&. The \f3pack\fR and \f3pack200\fR commands are separate products\&.
+.PP
+The Java SE API Specification provided with the JDK is the superseding authority, when there are discrepancies\&.
+.SH SEE\ ALSO
+.TP 0.2i
+\(bu
+unpack200(1)
+.TP 0.2i
+\(bu
+jar(1)
+.TP 0.2i
+\(bu
+jarsigner(1)
+.RE
+.br
+'pl 8.5i
+'bp
diff --git a/FCL/src/main/assets/java/man/man1/policytool.1 b/FCL/src/main/assets/java/man/man1/policytool.1
new file mode 100644
index 000000000..5af5919bd
--- /dev/null
+++ b/FCL/src/main/assets/java/man/man1/policytool.1
@@ -0,0 +1,114 @@
+'\" t
+.\" Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved.
+.\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+.\"
+.\" This code is free software; you can redistribute it and/or modify it
+.\" under the terms of the GNU General Public License version 2 only, as
+.\" published by the Free Software Foundation.
+.\"
+.\" This code 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
+.\" version 2 for more details (a copy is included in the LICENSE file that
+.\" accompanied this code).
+.\"
+.\" You should have received a copy of the GNU General Public License version
+.\" 2 along with this work; if not, write to the Free Software Foundation,
+.\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+.\"
+.\" Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+.\" or visit www.oracle.com if you need additional information or have any
+.\" questions.
+.\"
+.\" Arch: generic
+.\" Software: JDK 8
+.\" Date: 03 March 2015
+.\" SectDesc: Security Tools
+.\" Title: policytool.1
+.\"
+.if n .pl 99999
+.TH policytool 1 "03 March 2015" "JDK 8" "Security Tools"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+
+.SH NAME
+policytool \- Reads and writes a plain text policy file based on user input through the utility GUI\&.
+.SH SYNOPSIS
+.sp
+.nf
+
+\fBpolicytool\fR [ \fB\-file\fR ] [ \fIfilename\fR ]
+.fi
+.sp
+.TP
+-file
+.br
+Directs the \f3policytool\fR command to load a policy file\&.
+.TP
+\fIfilename\fR
+The name of the file to be loaded\&.
+.PP
+\fIExamples\fR:
+.PP
+Run the policy tool administrator utility:
+.sp
+.nf
+\f3policytool\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+Run the \f3policytool\fR command and load the specified file:
+.sp
+.nf
+\f3policytool \-file \fImypolicyfile\fR\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+.SH DESCRIPTION
+The \f3policytool\fR command calls an administrator\&'s GUI that enables system administrators to manage the contents of local policy files\&. A policy file is a plain-text file with a \f3\&.policy\fR extension, that maps remote requestors by domain, to permission objects\&. For details, see Default Policy Implementation and Policy File Syntax at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/PolicyFiles\&.html
+.SH OPTIONS
+.TP
+-file
+.br
+Directs the \f3policytool\fR command to load a policy file\&.
+.SH SEE\ ALSO
+.TP 0.2i
+\(bu
+Default Policy Implementation and Policy File Syntax at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/PolicyFiles\&.html
+.TP 0.2i
+\(bu
+Policy File Creation and Management at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/PolicyGuide\&.html
+.TP 0.2i
+\(bu
+Permissions in Java SE Development Kit (JDK) at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/permissions\&.html
+.TP 0.2i
+\(bu
+Java Security Overview at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/overview/jsoverview\&.html
+.TP 0.2i
+\(bu
+Java Cryptography Architecture (JCA) Reference Guide at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/crypto/CryptoSpec\&.html
+.RE
+.br
+'pl 8.5i
+'bp
diff --git a/FCL/src/main/assets/java/man/man1/rmid.1 b/FCL/src/main/assets/java/man/man1/rmid.1
new file mode 100644
index 000000000..4d8e3ddbd
--- /dev/null
+++ b/FCL/src/main/assets/java/man/man1/rmid.1
@@ -0,0 +1,314 @@
+'\" t
+.\" Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
+.\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+.\"
+.\" This code is free software; you can redistribute it and/or modify it
+.\" under the terms of the GNU General Public License version 2 only, as
+.\" published by the Free Software Foundation.
+.\"
+.\" This code 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
+.\" version 2 for more details (a copy is included in the LICENSE file that
+.\" accompanied this code).
+.\"
+.\" You should have received a copy of the GNU General Public License version
+.\" 2 along with this work; if not, write to the Free Software Foundation,
+.\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+.\"
+.\" Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+.\" or visit www.oracle.com if you need additional information or have any
+.\" questions.
+.\"
+.\" Arch: generic
+.\" Software: JDK 8
+.\" Date: 21 November 2013
+.\" SectDesc: Remote Method Invocation (RMI) Tools
+.\" Title: rmid.1
+.\"
+.if n .pl 99999
+.TH rmid 1 "21 November 2013" "JDK 8" "Remote Method Invocation (RMI) Tools"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+
+.SH NAME
+rmid \- Starts the activation system daemon that enables objects to be registered and activated in a Java Virtual Machine (JVM)\&.
+.SH SYNOPSIS
+.sp
+.nf
+
+\fBrmid\fR [\fIoptions\fR]
+.fi
+.sp
+.TP
+\fIoptions\fR
+The command-line options\&. See Options\&.
+.SH DESCRIPTION
+The \f3rmid\fR command starts the activation system daemon\&. The activation system daemon must be started before activatable objects can be either registered with the activation system or activated in a JVM\&. For details on how to write programs that use activatable objects, the \fIUsing Activation\fR tutorial at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/rmi/activation/overview\&.html
+.PP
+Start the daemon by executing the \f3rmid\fR command and specifying a security policy file, as follows:
+.sp
+.nf
+\f3rmid \-J\-Djava\&.security\&.policy=rmid\&.policy\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+When you run Oracle\(cqs implementation of the \f3rmid\fR command, by default you must specify a security policy file so that the \f3rmid\fR command can verify whether or not the information in each \f3ActivationGroupDesc\fR is allowed to be used to start a JVM for an activation group\&. Specifically, the command and options specified by the \f3CommandEnvironment\fR and any properties passed to an \f3ActivationGroupDesc\fR constructor must now be explicitly allowed in the security policy file for the \f3rmid\fR command\&. The value of the \f3sun\&.rmi\&.activation\&.execPolicy\fR property dictates the policy that the \f3rmid\fR command uses to determine whether or not the information in an \f3ActivationGroupDesc\fR can be used to start a JVM for an activation group\&. For more information see the description of the -J-Dsun\&.rmi\&.activation\&.execPolicy=policy option\&.
+.PP
+Executing the \f3rmid\fR command starts the Activator and an internal registry on the default port1098 and binds an \f3ActivationSystem\fR to the name \f3java\&.rmi\&.activation\&.ActivationSystem\fR in this internal registry\&.
+.PP
+To specify an alternate port for the registry, you must specify the \f3-port\fR option when you execute the \f3rmid\fR command\&. For example, the following command starts the activation system daemon and a registry on the registry\&'s default port, 1099\&.
+.sp
+.nf
+\f3rmid \-J\-Djava\&.security\&.policy=rmid\&.policy \-port 1099\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+.SH START\ RMID\ ON\ DEMAND
+An alternative to starting \f3rmid\fR from the command line is to configure \f3inetd\fR (Oracle Solaris) or \f3xinetd\fR (Linux) to start \f3rmid\fR on demand\&.
+.PP
+When RMID starts, it attempts to obtain an inherited channel (inherited from \f3inetd\fR/\f3xinetd\fR) by calling the \f3System\&.inheritedChannel\fR method\&. If the inherited channel is null or not an instance of \f3java\&.nio\&.channels\&.ServerSocketChannel\fR, then RMID assumes that it was not started by \f3inetd\fR/\f3xinetd\fR, and it starts as previously described\&.
+.PP
+If the inherited channel is a \f3ServerSocketChannel\fR instance, then RMID uses the \f3java\&.net\&.ServerSocket\fR obtained from the \f3ServerSocketChannel\fR as the server socket that accepts requests for the remote objects it exports: The registry in which the \f3java\&.rmi\&.activation\&.ActivationSystem\fR is bound and the \f3java\&.rmi\&.activation\&.Activator\fR remote object\&. In this mode, RMID behaves the same as when it is started from the command line, except in the following cases:
+.TP 0.2i
+\(bu
+Output printed to \f3System\&.err\fR is redirected to a file\&. This file is located in the directory specified by the \f3java\&.io\&.tmpdir\fR system property (typically \f3/var/tmp\fR or \f3/tmp\fR) with the prefix \f3rmid-err\fR and the suffix \f3tmp\fR\&.
+.TP 0.2i
+\(bu
+The \f3-port\fR option is not allowed\&. If this option is specified, then RMID exits with an error message\&.
+.TP 0.2i
+\(bu
+The \f3-log\fR option is required\&. If this option is not specified, then RMID exits with an error message
+.PP
+See the man pages for \f3inetd\fR (Oracle Solaris) or \f3xinetd\fR (Linux) for details on how to configure services to be started on demand\&.
+.SH OPTIONS
+.TP
+-C\fIoption\fR
+.br
+Specifies an option that is passed as a command-line argument to each child process (activation group) of the \f3rmid\fR command when that process is created\&. For example, you could pass a property to each virtual machine spawned by the activation system daemon:
+.sp
+.nf
+\f3rmid \-C\-Dsome\&.property=value\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+
+
+This ability to pass command-line arguments to child processes can be useful for debugging\&. For example, the following command enables server-call logging in all child JVMs\&.
+.sp
+.nf
+\f3rmid \-C\-Djava\&.rmi\&.server\&.logCalls=true\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+
+.TP
+-J\fIoption\fR
+.br
+Specifies an option that is passed to the Java interpreter running RMID\&. For example, to specify that the \f3rmid\fR command use a policy file named \f3rmid\&.policy\fR, the \f3-J\fR option can be used to define the \f3java\&.security\&.policy\fR property on the \f3rmid\fR command line, for example:
+.sp
+.nf
+\f3rmid \-J\-Djava\&.security\&.policy\-rmid\&.policy\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+
+.TP
+-J-Dsun\&.rmi\&.activation\&.execPolicy=\fIpolicy\fR
+.br
+Specifies the policy that RMID employs to check commands and command-line options used to start the JVM in which an activation group runs\&. Please note that this option exists only in Oracle\&'s implementation of the Java RMI activation daemon\&. If this property is not specified on the command line, then the result is the same as though \f3-J-Dsun\&.rmi\&.activation\&.execPolicy=default\fR were specified\&. The possible values of \f3policy\fR can be \f3default\fR, \f3policyClassName\fR, or \f3none\fR\&.
+.RS
+.TP 0.2i
+\(bu
+default
+
+The \f3default\fR or unspecified value \f3execPolicy\fR allows the \f3rmid\fR command to execute commands with specific command-line options only when the \f3rmid\fR command was granted permission to execute those commands and options in the security policy file that the \f3rmid\fR command uses\&. Only the default activation group implementation can be used with the default execution policy\&.
+
+The \f3rmid\fR command starts a JVM for an activation group with the information in the group\&'s registered activation group descriptor, an \f3ActivationGroupDesc\fR\&. The group descriptor specifies an optional \f3ActivationGroupDesc\&.CommandEnvironment\fR that includes the command to execute to start the activation group and any command-line options to be added to the command line\&. By default, the \f3rmid\fR command uses the \f3java\fR command found in \f3java\&.home\fR\&. The group descriptor also contains properties overrides that are added to the command line as options defined as: \f3-D=\fR\&.The \f3com\&.sun\&.rmi\&.rmid\&.ExecPermission\fR permission grants the \f3rmid\fR command permission to execute a command that is specified in the group descriptor\&'s \f3CommandEnvironment\fR to start an activation group\&. The \f3com\&.sun\&.rmi\&.rmid\&.ExecOptionPermission\fR permission enables the \f3rmid\fR command to use command-line options, specified as properties overrides in the group descriptor or as options in the \f3CommandEnvironment\fR when starting the activation group\&.When granting the \f3rmid\fR command permission to execute various commands and options, the permissions \f3ExecPermission\fR and \f3ExecOptionPermission\fR must be granted to all code sources\&.
+
+\fIExecPermission\fR
+
+The \f3ExecPermission\fR class represents permission for the \f3rmid\fR command to execute a specific command to start an activation group\&.
+
+\fISyntax\fR: The name of an \f3ExecPermission\fR is the path name of a command to grant the \f3rmid\fR command permission to execute\&. A path name that ends in a slash (/) and an asterisk (*) indicates that all of the files contained in that directory where slash is the file-separator character, \f3File\&.separatorChar\fR\&. A path name that ends in a slash (/) and a minus sign (-) indicates all files and subdirectories contained in that directory (recursively)\&. A path name that consists of the special token \f3<>\fR matches any file\&.
+
+A path name that consists of an asterisk (*) indicates all the files in the current directory\&. A path name that consists of a minus sign (-) indicates all the files in the current directory and (recursively) all files and subdirectories contained in the current directory\&.
+
+\fIExecOptionPermission\fR
+
+The \f3ExecOptionPermission\fR class represents permission for the \f3rmid\fR command to use a specific command-line option when starting an activation group\&. The name of an \f3ExecOptionPermission\fR is the value of a command-line option\&.
+
+\fISyntax\fR: Options support a limited wild card scheme\&. An asterisk signifies a wild card match, and it can appear as the option name itself (matches any option), or an asterisk (*) can appear at the end of the option name only when the asterisk (*) follows a dot (\&.) or an equals sign (=)\&.
+
+For example: \f3*\fR or \f3-Dmydir\&.*\fR or \f3-Da\&.b\&.c=*\fR is valid, but \f3*mydir\fR or \f3-Da*b\fR or \f3ab*\fR is not\&.
+
+\fIPolicy file for rmid\fR
+
+When you grant the \f3rmid\fR command permission to execute various commands and options, the permissions \f3ExecPermission\fR and \f3ExecOptionPermission\fR must be granted to all code sources (universally)\&. It is safe to grant these permissions universally because only the \f3rmid\fR command checks these permissions\&.
+
+An example policy file that grants various execute permissions to the \f3rmid\fR command is:
+.sp
+.nf
+\f3grant {\fP
+.fi
+.nf
+\f3 permission com\&.sun\&.rmi\&.rmid\&.ExecPermission\fP
+.fi
+.nf
+\f3 "/files/apps/java/jdk1\&.7\&.0/solaris/bin/java";\fP
+.fi
+.nf
+\f3\fP
+.fi
+.nf
+\f3 permission com\&.sun\&.rmi\&.rmid\&.ExecPermission\fP
+.fi
+.nf
+\f3 "/files/apps/rmidcmds/*";\fP
+.fi
+.nf
+\f3\fP
+.fi
+.nf
+\f3 permission com\&.sun\&.rmi\&.rmid\&.ExecOptionPermission\fP
+.fi
+.nf
+\f3 "\-Djava\&.security\&.policy=/files/policies/group\&.policy";\fP
+.fi
+.nf
+\f3\fP
+.fi
+.nf
+\f3 permission com\&.sun\&.rmi\&.rmid\&.ExecOptionPermission\fP
+.fi
+.nf
+\f3 "\-Djava\&.security\&.debug=*";\fP
+.fi
+.nf
+\f3\fP
+.fi
+.nf
+\f3 permission com\&.sun\&.rmi\&.rmid\&.ExecOptionPermission\fP
+.fi
+.nf
+\f3 "\-Dsun\&.rmi\&.*";\fP
+.fi
+.nf
+\f3};\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+
+
+The first permission granted allows the \f3rmid\fR tcommand o execute the 1\&.7\&.0 release of the \f3java\fR command, specified by its explicit path name\&. By default, the version of the \f3java\fR command found in \f3java\&.home\fR is used (the same one that the \f3rmid\fR command uses), and does not need to be specified in the policy file\&. The second permission allows the \f3rmid\fR command to execute any command in the directory \f3/files/apps/rmidcmds\fR\&.
+
+The third permission granted, an \f3ExecOptionPermission\fR, allows the \f3rmid\fR command to start an activation group that defines the security policy file to be \f3/files/policies/group\&.policy\fR\&. The next permission allows the \f3java\&.security\&.debug property\fR to be used by an activation group\&. The last permission allows any property in the \f3sun\&.rmi property\fR name hierarchy to be used by activation groups\&.
+
+To start the \f3rmid\fR command with a policy file, the \f3java\&.security\&.policy\fR property needs to be specified on the \f3rmid\fR command line, for example:
+
+\f3rmid -J-Djava\&.security\&.policy=rmid\&.policy\fR\&.
+.TP 0.2i
+\(bu
+
+
+If the default behavior is not flexible enough, then an administrator can provide, when starting the \f3rmid\fR command, the name of a class whose \f3checkExecCommand\fR method is executed to check commands to be executed by the \f3rmid\fR command\&.
+
+The \f3policyClassName\fR specifies a public class with a public, no-argument constructor and an implementation of the following \f3checkExecCommand\fR method:
+.sp
+.nf
+\f3 public void checkExecCommand(ActivationGroupDesc desc, String[] command)\fP
+.fi
+.nf
+\f3 throws SecurityException;\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+
+
+Before starting an activation group, the \f3rmid\fR command calls the policy\&'s \f3checkExecCommand\fR method and passes to it the activation group descriptor and an array that contains the complete command to start the activation group\&. If the \f3checkExecCommand\fR throws a \f3SecurityException\fR, then the \f3rmid\fR command does not start the activation group and an \f3ActivationException\fR is thrown to the caller attempting to activate the object\&.
+.TP 0.2i
+\(bu
+none
+
+If the \f3sun\&.rmi\&.activation\&.execPolicy\fR property value is \f3none\fR, then the \f3rmid\fR command does not perform any validation of commands to start activation groups\&.
+.RE
+
+.TP
+-log \fIdir\fR
+.br
+Specifies the name of the directory the activation system daemon uses to write its database and associated information\&. The log directory defaults to creating a log, in the directory in which the \f3rmid\fR command was executed\&.
+.TP
+-port \fIport\fR
+.br
+Specifies the port the registry uses\&. The activation system daemon binds the \f3ActivationSystem\fR, with the name \f3java\&.rmi\&.activation\&.ActivationSystem\fR, in this registry\&. The \f3ActivationSystem\fR on the local machine can be obtained using the following \f3Naming\&.lookup\fR method call:
+.sp
+.nf
+\f3import java\&.rmi\&.*; \fP
+.fi
+.nf
+\f3 import java\&.rmi\&.activation\&.*;\fP
+.fi
+.nf
+\f3\fP
+.fi
+.nf
+\f3 ActivationSystem system; system = (ActivationSystem)\fP
+.fi
+.nf
+\f3 Naming\&.lookup("//:port/java\&.rmi\&.activation\&.ActivationSystem");\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+
+.TP
+-stop
+.br
+Stops the current invocation of the \f3rmid\fR command for a port specified by the \f3-port\fR option\&. If no port is specified, then this option stops the \f3rmid\fR invocation running on port 1098\&.
+.SH ENVIRONMENT\ VARIABLES
+.TP
+CLASSPATH
+Used to provide the system a path to user-defined classes\&. Directories are separated by colons, for example: \f3\&.:/usr/local/java/classes\fR\&.
+.SH SEE\ ALSO
+.TP 0.2i
+\(bu
+java(1)
+.TP 0.2i
+\(bu
+Setting the Class Path
+.RE
+.br
+'pl 8.5i
+'bp
diff --git a/FCL/src/main/assets/java/man/man1/rmiregistry.1 b/FCL/src/main/assets/java/man/man1/rmiregistry.1
new file mode 100644
index 000000000..822d37660
--- /dev/null
+++ b/FCL/src/main/assets/java/man/man1/rmiregistry.1
@@ -0,0 +1,98 @@
+'\" t
+.\" Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+.\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+.\"
+.\" This code is free software; you can redistribute it and/or modify it
+.\" under the terms of the GNU General Public License version 2 only, as
+.\" published by the Free Software Foundation.
+.\"
+.\" This code 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
+.\" version 2 for more details (a copy is included in the LICENSE file that
+.\" accompanied this code).
+.\"
+.\" You should have received a copy of the GNU General Public License version
+.\" 2 along with this work; if not, write to the Free Software Foundation,
+.\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+.\"
+.\" Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+.\" or visit www.oracle.com if you need additional information or have any
+.\" questions.
+.\"
+.\" Arch: generic
+.\" Software: JDK 8
+.\" Date: 21 November 2013
+.\" SectDesc: Remote Method Invocation (RMI) Tools
+.\" Title: rmiregistry.1
+.\"
+.if n .pl 99999
+.TH rmiregistry 1 "21 November 2013" "JDK 8" "Remote Method Invocation (RMI) Tools"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+
+.SH NAME
+rmiregistry \- Starts a remote object registry on the specified port on the current host\&.
+.SH SYNOPSIS
+.sp
+.nf
+
+\fBrmiregistry\fR [ \fIport\fR ]
+.fi
+.sp
+.TP
+\fIport\fR
+The number of a \f3port\fR on the current host at which to start the remote object registry\&.
+.SH DESCRIPTION
+The \f3rmiregistry\fR command creates and starts a remote object registry on the specified port on the current host\&. If the port is omitted, then the registry is started on port 1099\&. The \f3rmiregistry\fR command produces no output and is typically run in the background, for example:
+.sp
+.nf
+\f3rmiregistry &\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+A remote object registry is a bootstrap naming service that is used by RMI servers on the same host to bind remote objects to names\&. Clients on local and remote hosts can then look up remote objects and make remote method invocations\&.
+.PP
+The registry is typically used to locate the first remote object on which an application needs to call methods\&. That object then provides application-specific support for finding other objects\&.
+.PP
+The methods of the \f3java\&.rmi\&.registry\&.LocateRegistry\fR class are used to get a registry operating on the local host or local host and port\&.
+.PP
+The URL-based methods of the \f3java\&.rmi\&.Naming\fR class operate on a registry and can be used to look up a remote object on any host and on the local host\&. Bind a simple name (string) to a remote object, rebind a new name to a remote object (overriding the old binding), unbind a remote object, and list the URL bound in the registry\&.
+.SH OPTIONS
+.TP
+-J
+.br
+Used with any Java option to pass the option following the \f3-J\fR (no spaces between the \f3-J\fR and the option) to the Java interpreter\&.
+.SH SEE\ ALSO
+.TP 0.2i
+\(bu
+java(1)
+.TP 0.2i
+\(bu
+\f3java\&.rmi\&.registry\&.LocateRegistry\fR class description at http://docs\&.oracle\&.com/javase/8/docs/api/java/rmi/registry/LocateRegistry\&.html
+.TP 0.2i
+\(bu
+\f3java\&.rmi\&.Naming class description\fR at http://docs\&.oracle\&.com/javase/8/docs/api/java/rmi/Naming\&.html
+.RE
+.br
+'pl 8.5i
+'bp
diff --git a/FCL/src/main/assets/java/man/man1/servertool.1 b/FCL/src/main/assets/java/man/man1/servertool.1
new file mode 100644
index 000000000..3204a2e2c
--- /dev/null
+++ b/FCL/src/main/assets/java/man/man1/servertool.1
@@ -0,0 +1,137 @@
+'\" t
+.\" Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
+.\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+.\"
+.\" This code is free software; you can redistribute it and/or modify it
+.\" under the terms of the GNU General Public License version 2 only, as
+.\" published by the Free Software Foundation.
+.\"
+.\" This code 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
+.\" version 2 for more details (a copy is included in the LICENSE file that
+.\" accompanied this code).
+.\"
+.\" You should have received a copy of the GNU General Public License version
+.\" 2 along with this work; if not, write to the Free Software Foundation,
+.\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+.\"
+.\" Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+.\" or visit www.oracle.com if you need additional information or have any
+.\" questions.
+.\"
+.\" Arch: generic
+.\" Software: JDK 8
+.\" Date: 21 November 2013
+.\" SectDesc: Java IDL and RMI-IIOP Tools
+.\" Title: servertool.1
+.\"
+.if n .pl 99999
+.TH servertool 1 "21 November 2013" "JDK 8" "Java IDL and RMI-IIOP Tools"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+
+.SH NAME
+servertool \- Provides an easy-to-use interface for developers to register, unregister, start up, and shut down a persistent server\&.
+.SH SYNOPSIS
+.sp
+.nf
+
+\fBservertool\fR \-ORBInitialPort \fInameserverport\fR [ \fIoptions\fR ] [ \fIcommands \fR]
+.fi
+.sp
+.TP
+\fIoptions\fR
+The command-line options\&. See Options\&.
+.TP
+commands
+The command-line commands\&. See Commands\&.
+.SH DESCRIPTION
+The \f3servertool\fR command provides the command-line interface for developers to register, unregister, start up, and shut down a persistent server\&. Command-line commands let you obtain various statistical information about the server\&. See Commands\&.
+.SH OPTIONS
+.TP
+-ORBInitialHost \fInameserverhost\fR
+.br
+This options is required\&. It specifies the host machine on which the name server runs and listens for incoming requests\&. The \f3nameserverhost\fR value must specify the port on which the \f3orb\fR is running and listening for requests\&. The value defaults to \f3localhost\fR when this option is not specified\&. If \f3orbd\fR and \f3servertool\fR are running on different machines, then you must specify the name or IP address of the host on which \f3orbd\fR is running\&.
+
+\fINote:\fR On Oracle Solaris, you must become a root user to start a process on a port below 1024\&. Oracle recommends that you use a port number above or equal to 1024 for the \f3nameserverport\fR value\&.
+.TP
+-J\fIoption\fR
+.br
+Passes \f3option\fR to the Java Virtual Machine, where \f3option\fR is one of the options described on the reference page for the Java application launcher\&. For example, \f3-J-Xms48m\fR sets the startup memory to 48 MB\&. See java(1)\&.
+.SH COMMANDS
+You can start the \f3servertool\fR command with or without a command-line command\&.
+.TP 0.2i
+\(bu
+If you did not specify a command when you started \f3servertool\fR, then the command-line tool displays the \f3servertool\fR prompt where you can enter commands: \f3servertool >\fR\&.
+.TP 0.2i
+\(bu
+If you specify a command when you start \f3servertool\fR, then the Java IDL Server Tool starts, executes the command, and exits\&.
+.TP
+.ll 180
+register -server \fIserver-class-name\fR -classpath \fIclasspath-to-server\fR [ -applicationName \fIapplication-name\fR -args \fIargs-to-server\fR -vmargs \fIflags-for-JVM\fR ]
+Registers a new persistent server with the Object Request Broker Daemon (ORBD)\&. If the server is not already registered, then it is registered and activated\&. This command causes an installation method to be called in the \f3main\fR class of the server identified by the \f3-server\fR option\&. The installation method must be \f3public static void install(org\&.omg\&.CORBA\&.ORB)\fR\&. The install method is optional and lets developers provide their own server installation behavior, such as creating a database schema\&.
+.TP
+.ll 180
+unregister -serverid \fIserver-id\fR | -applicationName \fIapplication-name\fR
+Unregisters a server from the ORBD with either its server ID or its application name\&. This command causes an uninstallation method to be called in the \f3main\fR class of the server identified by the \f3-server\fR option\&. The \f3uninstall\fR method must be \f3public static void uninstall(org\&.omg\&.CORBA\&.ORB)\fR\&. The \f3uninstall\fR method is optional and lets developers provide their own server uninstallation behavior, such as undoing the behavior of the \f3install\fR method\&.
+.TP
+getserverid -applicationName \fIapplication-name\fR
+Returns the server ID that corresponds to the \f3application-name\fR value\&.
+.TP
+list
+Lists information about all persistent servers registered with the ORBD\&.
+.TP
+listappnames
+Lists the application names for all servers currently registered with the ORBD\&.
+.TP
+listactive
+Lists information about all persistent servers that were started by the ORBD and are currently running\&.
+.TP
+.ll 180
+locate -serverid \fIserver-id\fR | -applicationName \fIapplication-name\fR [ -endpointType \fIendpointType\fR ]
+Locates the endpoints (ports) of a specific type for all ORBs created by a registered server\&. If a server is not already running, then it is activated\&. If an \f3endpointType\fR value is not specified, then the plain/non-protected endpoint associated with each ORB in a server is returned\&.
+.TP
+.ll 180
+locateperorb -serverid \fIserver-id\fR | -applicationName \fIapplication-name\fR [ -orbid \fIORB-name\fR ]
+Locates all the endpoints (ports) registered by a specific Object Request Broker (ORB) of registered server\&. If a server is not already running, then it is activated\&. If an \f3orbid\fR is not specified, then the default value of \f3""\fR is assigned to the \f3orbid\fR\&. If any ORBs are created with an \f3orbid\fR of empty string, then all ports registered by it are returned\&.
+.TP
+orblist -serverid \fIserver-id\fR | -applicationName \fIapplication-name\fR
+Lists the \f3ORBId\fR of the ORBs defined on a server\&. An \f3ORBId\fR is the string name for the ORB created by the server\&. If the server is not already running, then it is activated\&.
+.TP
+shutdown -serverid \fIserver-id\fR | -applicationName application-name
+Shut down an active server that is registered with ORBD\&. During execution of this command, the \f3shutdown\fR method defined in the class specified by either the \f3-serverid\fR or \f3-applicationName\fR parameter is also called to shut down the server process\&.
+.TP
+startup -serverid \fIserver-id\fR | -applicationName application-name
+Starts up or activate a server that is registered with ORBD\&. If the server is not running, then this command starts the server\&. If the server is already running, then an error message is displayed\&.
+.TP
+help
+Lists all the commands available to the server through the \f3servertool\fR command\&.
+.TP
+quit
+Exits the \f3servertool\fR command\&.
+.SH SEE\ ALSO
+.TP 0.2i
+\(bu
+orbd(1)
+.RE
+.br
+'pl 8.5i
+'bp
diff --git a/FCL/src/main/assets/java/man/man1/tnameserv.1 b/FCL/src/main/assets/java/man/man1/tnameserv.1
new file mode 100644
index 000000000..446183b26
--- /dev/null
+++ b/FCL/src/main/assets/java/man/man1/tnameserv.1
@@ -0,0 +1,488 @@
+'\" t
+.\" Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
+.\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+.\"
+.\" This code is free software; you can redistribute it and/or modify it
+.\" under the terms of the GNU General Public License version 2 only, as
+.\" published by the Free Software Foundation.
+.\"
+.\" This code 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
+.\" version 2 for more details (a copy is included in the LICENSE file that
+.\" accompanied this code).
+.\"
+.\" You should have received a copy of the GNU General Public License version
+.\" 2 along with this work; if not, write to the Free Software Foundation,
+.\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+.\"
+.\" Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+.\" or visit www.oracle.com if you need additional information or have any
+.\" questions.
+.\"
+.\" Arch: generic
+.\" Software: JDK 8
+.\" Date: 21 November 2013
+.\" SectDesc: Java IDL and RMI-IIOP Tools
+.\" Title: tnameserv.1
+.\"
+.if n .pl 99999
+.TH tnameserv 1 "21 November 2013" "JDK 8" "Java IDL and RMI-IIOP Tools"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+
+.SH NAME
+tnameserv \- Interface Definition Language (IDL)\&.
+.SH SYNOPSIS
+.sp
+.nf
+
+\fBtnameserve\fR \fB\-ORBInitialPort\fR [ \fInameserverport\fR ]
+.fi
+.sp
+.TP
+-ORBInitialPort \fInameserverport\fR
+.br
+The initial port where the naming service listens for the bootstrap protocol used to implement the ORB \f3resolve_initial_references\fR and \f3list_initial_references\fR methods\&.
+.SH DESCRIPTION
+Java IDL includes the Object Request Broker Daemon (ORBD)\&. ORBD is a daemon process that contains a Bootstrap Service, a Transient Naming Service, a Persistent Naming Service, and a Server Manager\&. The Java IDL tutorials all use ORBD, but you can substitute the \f3tnameserv\fR command for the \f3orbd\fR command in any of the examples that use a Transient Naming Service\&.
+.PP
+See orbd(1) or Naming Service at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/idl/jidlNaming\&.html
+.PP
+The CORBA Common Object Services (COS) Naming Service provides a tree-structure directory for object references similar to a file system that provides a directory structure for files\&. The Transient Naming Service provided with Java IDL, \f3tnameserv\fR, is a simple implementation of the COS Naming Service specification\&.
+.PP
+Object references are stored in the name space by name and each object reference-name pair is called a name binding\&. Name bindings can be organized under naming contexts\&. Naming contexts are name bindings and serve the same organizational function as a file system subdirectory\&. All bindings are stored under the initial naming context\&. The initial naming context is the only persistent binding in the name space\&. The rest of the name space is lost when the Java IDL naming service process stops and restarts\&.
+.PP
+For an applet or application to use COS naming, its ORB must know the port of a host running a naming service or have access to an initial naming context string for that naming service\&. The naming service can either be the Java IDL naming service or another COS-compliant naming service\&.
+.SS START\ THE\ NAMING\ SERVICE
+You must start the Java IDL naming service before an application or applet that uses its naming service\&. Installation of the Java IDL product creates a script (Oracle Solaris: \f3tnameserv\fR) or executable file (Windows: \f3tnameserv\&.exe\fR) that starts the Java IDL naming service\&. Start the naming service so it runs in the background\&.
+.PP
+If you do not specify otherwise, then the Java IDL naming service listens on port 900 for the bootstrap protocol used to implement the ORB \f3resolve_initial_references\fR and \f3list_initial_references methods\fR, as follows:
+.sp
+.nf
+\f3tnameserv \-ORBInitialPort nameserverport&\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+If you do not specify the name server port, then port 900 is used by default\&. When running Oracle Solaris software, you must become the root user to start a process on a port below 1024\&. For this reason, it is recommended that you use a port number greater than or equal to 1024\&. To specify a different port, for example, 1050, and to run the naming service in the background, from a UNIX command shell, enter:
+.sp
+.nf
+\f3tnameserv \-ORBInitialPort 1050&\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+From an MS-DOS system prompt (Windows), enter:
+.sp
+.nf
+\f3start tnameserv \-ORBInitialPort 1050\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+Clients of the name server must be made aware of the new port number\&. Do this by setting the \f3org\&.omg\&.CORBA\&.ORBInitialPort\fR property to the new port number when you create the ORB object\&.
+.SS RUN\ THE\ SERVER\ AND\ CLIENT\ ON\ DIFFERENT\ HOSTS
+In most of the Java IDL and RMI-IIOP tutorials, the naming service, server, and client are all running on the development machine\&. In real-world deployment, the client and server probably run on different host machines from the Naming Service\&.
+.PP
+For the client and server to find the Naming Service, they must be made aware of the port number and host on which the naming service is running\&. Do this by setting the \f3org\&.omg\&.CORBA\&.ORBInitialPort\fR and \f3org\&.omg\&.CORBA\&.ORBInitialHost\fR properties in the client and server files to the machine name and port number on which the Naming Service is running\&. An example of this is shown in Getting Started Using RMI-IIOP at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/rmi-iiop/rmiiiopexample\&.html
+.PP
+You could also use the command-line options \f3-ORBInitialPort nameserverport#\fR and \f3-ORBInitialHost nameserverhostname\fR to tell the client and server where to find the naming service\&. For one example of doing this using the command-line option, see Java IDL: The Hello World Example on Two Machines at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/idl/tutorial/jidl2machines\&.html
+.PP
+For example, suppose the Transient Naming Service, \f3tnameserv\fR is running on port 1050 on host \f3nameserverhost\fR\&. The client is running on host \f3clienthost,\fR and the server is running on host \f3serverhost\fR\&.
+.PP
+Start \f3tnameserv\fR on the host \f3nameserverhost\fR:
+.sp
+.nf
+\f3tnameserv \-ORBInitialPort 1050\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+Start the server on the \f3serverhost\fR:
+.sp
+.nf
+\f3java Server \-ORBInitialPort 1050 \-ORBInitialHost nameserverhost\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+Start the client on the \f3clienthost\fR:
+.sp
+.nf
+\f3java Client \-ORBInitialPort 1050 \-ORBInitialHost nameserverhost\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+.SS STOP\ THE\ NAMING\ SERVICE
+To stop the Java IDL naming service, use the relevant operating system command, such as \f3kill\fR for a Unix process or \f3Ctrl+C\fR for a Windows process\&. The naming service continues to wait for invocations until it is explicitly shut down\&. Note that names registered with the Java IDL naming service disappear when the service is terminated\&.
+.SH OPTIONS
+.TP
+-J\fIoption\fR
+.br
+Passes \f3option\fR to the Java Virtual Machine, where \f3option\fR is one of the options described on the reference page for the Java application launcher\&. For example, \f3-J-Xms48m\fR sets the startup memory to 48 MB\&. See java(1)\&.
+.SH EXAMPLES
+.SS ADD\ OBJECTS\ TO\ THE\ NAME\ SPACE
+The following example shows how to add names to the name space\&. It is a self-contained Transient Naming Service client that creates the following simple tree\&.
+.sp
+.nf
+\f3Initial Naming Context\fP
+.fi
+.nf
+\f3 plans\fP
+.fi
+.nf
+\f3 Personal\fP
+.fi
+.nf
+\f3 calendar\fP
+.fi
+.nf
+\f3 schedule\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+In this example, \f3plans\fR is an object reference and \f3Personal\fR is a naming context that contains two object references: \f3calendar\fR and \f3schedule\fR\&.
+.sp
+.nf
+\f3import java\&.util\&.Properties;\fP
+.fi
+.nf
+\f3import org\&.omg\&.CORBA\&.*;\fP
+.fi
+.nf
+\f3import org\&.omg\&.CosNaming\&.*;\fP
+.fi
+.nf
+\f3\fP
+.fi
+.nf
+\f3public class NameClient {\fP
+.fi
+.nf
+\f3\fP
+.fi
+.nf
+\f3 public static void main(String args[]) {\fP
+.fi
+.nf
+\f3\fP
+.fi
+.nf
+\f3 try {\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+In Start the Naming Service, the \f3nameserver\fR was started on port 1050\&. The following code ensures that the client program is aware of this port number\&.
+.sp
+.nf
+\f3 Properties props = new Properties();\fP
+.fi
+.nf
+\f3 props\&.put("org\&.omg\&.CORBA\&.ORBInitialPort", "1050");\fP
+.fi
+.nf
+\f3 ORB orb = ORB\&.init(args, props);\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+This code obtains the initial naming context and assigns it to \f3ctx\fR\&. The second line copies \f3ctx\fR into a dummy object reference \f3objref\fR that is attached to various names and added into the name space\&.
+.sp
+.nf
+\f3 NamingContext ctx =\fP
+.fi
+.nf
+\f3 NamingContextHelper\&.narrow(\fP
+.fi
+.nf
+\f3 orb\&.resolve_initial_references("NameService"));\fP
+.fi
+.nf
+\f3 NamingContext objref = ctx;\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+This code creates a name \f3plans\fR of type \f3text\fR and binds it to the dummy object reference\&. \f3plans\fR is then added under the initial naming context using the \f3rebind\fR method\&. The \f3rebind\fR method enables you to run this program over and over again without getting the exceptions from using the \f3bind\fR method\&.
+.sp
+.nf
+\f3 NameComponent nc1 = new NameComponent("plans", "text");\fP
+.fi
+.nf
+\f3 NameComponent[] name1 = {nc1};\fP
+.fi
+.nf
+\f3 ctx\&.rebind(name1, objref);\fP
+.fi
+.nf
+\f3 System\&.out\&.println("plans rebind successful!");\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+This code creates a naming context called \f3Personal\fR of type \f3directory\fR\&. The resulting object reference, \f3ctx2\fR, is bound to the \f3name\fR and added under the initial naming context\&.
+.sp
+.nf
+\f3 NameComponent nc2 = new NameComponent("Personal", "directory");\fP
+.fi
+.nf
+\f3 NameComponent[] name2 = {nc2};\fP
+.fi
+.nf
+\f3 NamingContext ctx2 = ctx\&.bind_new_context(name2);\fP
+.fi
+.nf
+\f3 System\&.out\&.println("new naming context added\&.\&.");\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+The remainder of the code binds the dummy object reference using the names \f3schedule\fR and \f3calendar\fR under the \f3Personal\fR naming context (\f3ctx2\fR)\&.
+.sp
+.nf
+\f3 NameComponent nc3 = new NameComponent("schedule", "text");\fP
+.fi
+.nf
+\f3 NameComponent[] name3 = {nc3};\fP
+.fi
+.nf
+\f3 ctx2\&.rebind(name3, objref);\fP
+.fi
+.nf
+\f3 System\&.out\&.println("schedule rebind successful!");\fP
+.fi
+.nf
+\f3\fP
+.fi
+.nf
+\f3 NameComponent nc4 = new NameComponent("calender", "text");\fP
+.fi
+.nf
+\f3 NameComponent[] name4 = {nc4};\fP
+.fi
+.nf
+\f3 ctx2\&.rebind(name4, objref);\fP
+.fi
+.nf
+\f3 System\&.out\&.println("calender rebind successful!");\fP
+.fi
+.nf
+\f3 } catch (Exception e) {\fP
+.fi
+.nf
+\f3 e\&.printStackTrace(System\&.err);\fP
+.fi
+.nf
+\f3 }\fP
+.fi
+.nf
+\f3 }\fP
+.fi
+.nf
+\f3}\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+.SS BROWSING\ THE\ NAME\ SPACE
+The following sample program shoes how to browse the name space\&.
+.sp
+.nf
+\f3import java\&.util\&.Properties;\fP
+.fi
+.nf
+\f3import org\&.omg\&.CORBA\&.*;\fP
+.fi
+.nf
+\f3import org\&.omg\&.CosNaming\&.*;\fP
+.fi
+.nf
+\f3\fP
+.fi
+.nf
+\f3public class NameClientList {\fP
+.fi
+.nf
+\f3\fP
+.fi
+.nf
+\f3 public static void main(String args[]) {\fP
+.fi
+.nf
+\f3\fP
+.fi
+.nf
+\f3 try {\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+In Start the Naming Service, the \f3nameserver\fR was started on port 1050\&. The following code ensures that the client program is aware of this port number\&.
+.sp
+.nf
+\f3 Properties props = new Properties();\fP
+.fi
+.nf
+\f3 props\&.put("org\&.omg\&.CORBA\&.ORBInitialPort", "1050");\fP
+.fi
+.nf
+\f3 ORB orb = ORB\&.init(args, props);\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+The following code obtains the initial naming context\&.
+.sp
+.nf
+\f3 NamingContext nc =\fP
+.fi
+.nf
+\f3 NamingContextHelper\&.narrow(\fP
+.fi
+.nf
+\f3 orb\&.resolve_initial_references("NameService"));\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+The \f3list\fR method lists the bindings in the naming context\&. In this case, up to 1000 bindings from the initial naming context will be returned in the \f3BindingListHolder\fR; any remaining bindings are returned in the \f3BindingIteratorHolder\fR\&.
+.sp
+.nf
+\f3 BindingListHolder bl = new BindingListHolder();\fP
+.fi
+.nf
+\f3 BindingIteratorHolder blIt= new BindingIteratorHolder();\fP
+.fi
+.nf
+\f3 nc\&.list(1000, bl, blIt);\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+This code gets the array of bindings out of the returned \f3BindingListHolder\fR\&. If there are no bindings, then the program ends\&.
+.sp
+.nf
+\f3 Binding bindings[] = bl\&.value;\fP
+.fi
+.nf
+\f3 if (bindings\&.length == 0) return;\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+The remainder of the code loops through the bindings and prints outs the names\&.
+.sp
+.nf
+\f3 for (int i=0; i < bindings\&.length; i++) {\fP
+.fi
+.nf
+\f3\fP
+.fi
+.nf
+\f3 // get the object reference for each binding\fP
+.fi
+.nf
+\f3 org\&.omg\&.CORBA\&.Object obj = nc\&.resolve(bindings[i]\&.binding_name);\fP
+.fi
+.nf
+\f3 String objStr = orb\&.object_to_string(obj);\fP
+.fi
+.nf
+\f3 int lastIx = bindings[i]\&.binding_name\&.length\-1;\fP
+.fi
+.nf
+\f3\fP
+.fi
+.nf
+\f3 // check to see if this is a naming context\fP
+.fi
+.nf
+\f3 if (bindings[i]\&.binding_type == BindingType\&.ncontext) {\fP
+.fi
+.nf
+\f3 System\&.out\&.println("Context: " +\fP
+.fi
+.nf
+\f3 bindings[i]\&.binding_name[lastIx]\&.id);\fP
+.fi
+.nf
+\f3 } else {\fP
+.fi
+.nf
+\f3 System\&.out\&.println("Object: " +\fP
+.fi
+.nf
+\f3 bindings[i]\&.binding_name[lastIx]\&.id);\fP
+.fi
+.nf
+\f3 }\fP
+.fi
+.nf
+\f3 }\fP
+.fi
+.nf
+\f3 } catch (Exception e) {\fP
+.fi
+.nf
+\f3 e\&.printStackTrace(System\&.err)\fP
+.fi
+.nf
+\f3 }\fP
+.fi
+.nf
+\f3 }\fP
+.fi
+.nf
+\f3}\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+.SH SEE\ ALSO
+.TP 0.2i
+\(bu
+orbd(1)
+.RE
+.br
+'pl 8.5i
+'bp
diff --git a/FCL/src/main/assets/java/man/man1/unpack200.1 b/FCL/src/main/assets/java/man/man1/unpack200.1
new file mode 100644
index 000000000..22d63c0cc
--- /dev/null
+++ b/FCL/src/main/assets/java/man/man1/unpack200.1
@@ -0,0 +1,137 @@
+'\" t
+.\" Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved.
+.\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+.\"
+.\" This code is free software; you can redistribute it and/or modify it
+.\" under the terms of the GNU General Public License version 2 only, as
+.\" published by the Free Software Foundation.
+.\"
+.\" This code 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
+.\" version 2 for more details (a copy is included in the LICENSE file that
+.\" accompanied this code).
+.\"
+.\" You should have received a copy of the GNU General Public License version
+.\" 2 along with this work; if not, write to the Free Software Foundation,
+.\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+.\"
+.\" Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+.\" or visit www.oracle.com if you need additional information or have any
+.\" questions.
+.\"
+.\" Arch: generic
+.\" Software: JDK 8
+.\" Date: 21 November 2013
+.\" SectDesc: Java Deployment Tools
+.\" Title: unpack200.1
+.\"
+.if n .pl 99999
+.TH unpack200 1 "21 November 2013" "JDK 8" "Java Deployment Tools"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+
+.SH NAME
+unpack200 \- Transforms a packed file produced by pack200(1) into a JAR file for web deployment\&.
+.SH SYNOPSIS
+.sp
+.nf
+
+\fBunpack200\fR [ \fIoptions\fR ] input\-file \fIJAR\-file\fR
+.fi
+.sp
+.TP
+\fIoptions\fR
+The command-line options\&. See Options\&.
+.TP
+\fIinput-file\fR
+Name of the input file, which can be a pack200 gzip file or a pack200 file\&. The input can also be JAR file produced by \f3pack200\fR(1) with an effort of \f30\fR, in which case the contents of the input file are copied to the output JAR file with the Pack200 marker\&.
+.TP
+\fIJAR-file\fR
+Name of the output JAR file\&.
+.SH DESCRIPTION
+The \f3unpack200\fR command is a native implementation that transforms a packed file produced by \f3pack200\fR\f3(1)\fR into a JAR file\&. A typical usage follows\&. In the following example, the \f3myarchive\&.jar\fR file is produced from \f3myarchive\&.pack\&.gz\fR with the default \f3unpack200\fR command settings\&.
+.sp
+.nf
+\f3unpack200 myarchive\&.pack\&.gz myarchive\&.jar\fP
+.fi
+.nf
+\f3\fP
+.fi
+.sp
+.SH OPTIONS
+.TP
+-Hvalue --deflate-hint=\fIvalue\fR
+.br
+Sets the deflation to be \f3true\fR, \f3false\fR, or \f3keep\fR on all entries within a JAR file\&. The default mode is \f3keep\fR\&. If the value is \f3true\fR or \f3false\fR, then the \f3--deflate=hint\fR option overrides the default behavior and sets the deflation mode on all entries within the output JAR file\&.
+.TP
+-r --remove-pack-file
+.br
+Removes the input pack file\&.
+.TP
+-v --verbose
+.br
+Displays minimal messages\&. Multiple specifications of this option displays more verbose messages\&.
+.TP
+-q --quiet
+.br
+Specifies quiet operation with no messages\&.
+.TP
+-lfilename --log-file=\fIfilename\fR
+.br
+Specifies a log file where output messages are logged\&.
+.TP
+-? -h --help
+.br
+Prints help information about the \f3unpack200\fR command\&.
+.TP
+-V --version
+.br
+Prints version information about the \f3unpack200\fR command\&.
+.TP
+-J\fIoption\fR
+.br
+Passes option to the Java Virtual Machine, where \f3option\fR is one of the options described on the reference page for the Java application launcher\&. For example, \f3-J-Xms48m\fR sets the startup memory to 48 MB\&. See java(1)\&.
+.SH NOTES
+This command should not be confused with the \f3unpack\fR command\&. They are distinctly separate products\&.
+.PP
+The Java SE API Specification provided with the JDK is the superseding authority in case of discrepancies\&.
+.SH EXIT\ STATUS
+The following exit values are returned: 0 for successful completion, and a value that is greater than 0 when an error occurred\&.
+.SH SEE\ ALSO
+.TP 0.2i
+\(bu
+pack200(1)
+.TP 0.2i
+\(bu
+jar(1)
+.TP 0.2i
+\(bu
+jarsigner(1)
+.TP 0.2i
+\(bu
+Pack200 and Compression at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/deployment/deployment-guide/pack200\&.html
+.TP 0.2i
+\(bu
+The Java SE Technical Documentation page at http://docs\&.oracle\&.com/javase/
+.RE
+.br
+'pl 8.5i
+'bp
diff --git a/FCL/src/main/assets/java/release b/FCL/src/main/assets/java/release
new file mode 100644
index 000000000..b79069636
--- /dev/null
+++ b/FCL/src/main/assets/java/release
@@ -0,0 +1,5 @@
+JAVA_VERSION="1.8.0"
+OS_NAME="Linux"
+OS_VERSION="2.6"
+OS_ARCH="aarch64"
+SOURCE=""
diff --git a/FCL/src/main/assets/java/version b/FCL/src/main/assets/java/version
new file mode 100644
index 000000000..62f945751
--- /dev/null
+++ b/FCL/src/main/assets/java/version
@@ -0,0 +1 @@
+6
\ No newline at end of file
diff --git a/FCL/src/main/java/com/tungsten/fcl/AssetsUtils.java b/FCL/src/main/java/com/tungsten/fcl/AssetsUtils.java
new file mode 100644
index 000000000..df78dd251
--- /dev/null
+++ b/FCL/src/main/java/com/tungsten/fcl/AssetsUtils.java
@@ -0,0 +1,188 @@
+package com.tungsten.fcl;
+
+import android.content.Context;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
+import android.util.Log;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+public class AssetsUtils {
+
+ private static AssetsUtils instance;
+ private static final int SUCCESS = 1;
+ private static final int FAILED = 0;
+ private Context context;
+ private FileOperateCallback callback;
+ private ProgressCallback progressCallback;
+ private volatile boolean isSuccess;
+ private String errorStr;
+
+ public static AssetsUtils getInstance(Context context) {
+ if (instance == null)
+ instance = new AssetsUtils(context);
+ return instance;
+ }
+
+ private AssetsUtils(Context context) {
+ this.context = context;
+ }
+
+ private Handler handler = new Handler(Looper.getMainLooper()) {
+ @Override
+ public void handleMessage(Message msg) {
+ super.handleMessage(msg);
+ if (callback != null) {
+ if (msg.what == SUCCESS) {
+ callback.onSuccess();
+ }
+ if (msg.what == FAILED) {
+ callback.onFailed(msg.obj.toString());
+ }
+ }
+ }
+ };
+
+ public static String readAssetsTxt(Context context,String fileName){
+ try {
+ InputStream is = context.getAssets().open(fileName);
+ int size = is.available();
+ byte[] buffer = new byte[size];
+ is.read(buffer);
+ is.close();
+ String text = new String(buffer, "utf-8");
+ Log.e("latest",text);
+ return text;
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ public AssetsUtils copyAssetsToSD(final String srcPath, final String sdPath) {
+ currentPosition = 0;
+ try {
+ totalSize = getTotalSize(context,srcPath);
+ Log.e("assetsFileSize",Long.toString(totalSize));
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ new Thread(() -> {
+ copyAssetsToDst(context, srcPath, sdPath);
+ if (isSuccess)
+ handler.obtainMessage(SUCCESS).sendToTarget();
+ else
+ handler.obtainMessage(FAILED, errorStr).sendToTarget();
+ }).start();
+ return this;
+ }
+
+ public AssetsUtils copyOnMainThread(final String srcPath, final String sdPath) {
+ currentPosition = 0;
+ try {
+ totalSize = getTotalSize(context,srcPath);
+ Log.e("assetsFileSize",Long.toString(totalSize));
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ copyAssetsToDst(context, srcPath, sdPath);
+ if (isSuccess) {
+ handler.obtainMessage(SUCCESS).sendToTarget();
+ }
+ else {
+ handler.obtainMessage(FAILED, errorStr).sendToTarget();
+ }
+ return this;
+ }
+
+ public AssetsUtils setProgressCallback(ProgressCallback callback) {
+ this.progressCallback = callback;
+ return instance;
+ }
+
+ public void setFileOperateCallback(FileOperateCallback callback) {
+ this.callback = callback;
+ }
+
+ long currentPosition = 0;
+ long totalSize = 0;
+
+ int currentProgress = 0;
+
+ private void copyAssetsToDst(Context context, String srcPath, String dstPath) {
+ try {
+ String fileNames[] = context.getAssets().list(srcPath);
+ if (fileNames.length > 0) {
+ File file = new File(dstPath);
+ if (!file.exists()) file.mkdirs();
+ for (String fileName : fileNames) {
+ if (!srcPath.equals("")) { // assets 文件夹下的目录
+ copyAssetsToDst(context, srcPath + File.separator + fileName, dstPath + File.separator + fileName);
+ } else { // assets 文件夹
+ copyAssetsToDst(context, fileName, dstPath + File.separator + fileName);
+ }
+ }
+ } else {
+ File outFile = new File(dstPath);
+ InputStream is = context.getAssets().open(srcPath);
+ FileOutputStream fos = new FileOutputStream(outFile);
+ byte[] buffer = new byte[1024];
+ int byteCount;
+ while ((byteCount = is.read(buffer)) != -1) {
+ currentPosition += byteCount;
+ fos.write(buffer, 0, byteCount);
+ if (progressCallback != null) {
+ long cur = 100L * currentPosition;
+ int progress = (int) (cur / totalSize);
+ if (progress != currentProgress) {
+ currentProgress = progress;
+ handler.post(() -> {
+ progressCallback.onProgress(progress);
+ });
+ }
+ }
+ }
+ fos.flush();
+ is.close();
+ fos.close();
+ }
+ isSuccess = true;
+ } catch (Exception e) {
+ e.printStackTrace();
+ errorStr = e.getMessage();
+ isSuccess = false;
+ }
+ }
+
+ private long getTotalSize(Context context,String srcPath) throws IOException {
+ String fileNames[] = context.getAssets().list(srcPath);
+ long size = 0;
+ if (fileNames.length > 0) {
+ for (String fileName : fileNames) {
+ if (!srcPath.equals("")) { // assets 文件夹下的目录
+ size += getTotalSize(context, srcPath + File.separator + fileName);
+ } else { // assets 文件夹
+ size += getTotalSize(context, fileName);
+ }
+ }
+ } else {
+ InputStream is = context.getAssets().open(srcPath);
+ size += is.available();
+ }
+ return size;
+ }
+
+ public interface FileOperateCallback {
+ void onSuccess();
+ void onFailed(String error);
+ }
+
+ public interface ProgressCallback{
+ void onProgress(int progress);
+ }
+
+}
\ No newline at end of file
diff --git a/FCL/src/main/java/com/tungsten/fcl/MainActivity.java b/FCL/src/main/java/com/tungsten/fcl/MainActivity.java
new file mode 100644
index 000000000..d03925326
--- /dev/null
+++ b/FCL/src/main/java/com/tungsten/fcl/MainActivity.java
@@ -0,0 +1,220 @@
+package com.tungsten.fcl;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AlertDialog;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.core.app.ActivityCompat;
+import androidx.core.content.ContextCompat;
+
+import android.Manifest;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.graphics.SurfaceTexture;
+import android.net.Uri;
+import android.os.Build;
+import android.os.Bundle;
+import android.os.Environment;
+import android.provider.Settings;
+import android.view.Surface;
+import android.view.TextureView;
+import android.view.View;
+
+import com.tungsten.fclauncher.FCLConfig;
+import com.tungsten.fclauncher.FCLauncher;
+import com.tungsten.fclauncher.bridge.FCLBridgeCallback;
+
+import java.io.File;
+import java.io.IOException;
+
+public class MainActivity extends AppCompatActivity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+
+ new Thread(() -> {
+ //AssetsUtils.getInstance(MainActivity.this).copyOnMainThread("java",getFilesDir() + "/java");
+ //AssetsUtils.getInstance(MainActivity.this).copyOnMainThread("app_runtime",getFilesDir().getParent() + "/app_runtime");
+ }).start();
+
+ requestPermission();
+ }
+
+ private void requestPermission() {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+ // 先判断有没有权限
+ if (Environment.isExternalStorageManager()) {
+ try {
+ init();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ } else {
+ Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
+ intent.setData(Uri.parse("package:" + getPackageName()));
+ startActivityForResult(intent, 1000);
+ }
+ } else {
+ // 先判断有没有权限
+ if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED &&
+ ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
+ try {
+ init();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ } else {
+ ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1000);
+ }
+ }
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ if (requestCode == 1000 && Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+ if (Environment.isExternalStorageManager()) {
+ try {
+ init();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ } else {
+ new AlertDialog.Builder(this)
+ .setMessage("a")
+ .setPositiveButton("OK", (dialog1, which) ->
+ requestPermission())
+ .setNegativeButton("Cancel", null)
+ .create()
+ .show();
+ }
+ }
+ }
+
+ private void init() throws IOException {
+ String[] args3 = new String[] {
+ getFilesDir() + "/java/bin/java",
+ "-cp",
+ "/data/user/0/com.tungsten.fcl/app_runtime/lwjgl3/lwjgl-jemalloc.jar:/data/user/0/com.tungsten.fcl/app_runtime/lwjgl3/lwjgl-tinyfd.jar:/data/user/0/com.tungsten.fcl/app_runtime/lwjgl3/lwjgl-opengl.jar:/data/user/0/com.tungsten.fcl/app_runtime/lwjgl3/lwjgl-openal.jar:/data/user/0/com.tungsten.fcl/app_runtime/lwjgl3/lwjgl-glfw.jar:/data/user/0/com.tungsten.fcl/app_runtime/lwjgl3/lwjgl-stb.jar:/data/user/0/com.tungsten.fcl/app_runtime/lwjgl3/lwjgl.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/com/mojang/patchy/1.3.9/patchy-1.3.9.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/oshi-project/oshi-core/1.1/oshi-core-1.1.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/net/java/dev/jna/jna/4.4.0/jna-4.4.0.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/net/java/dev/jna/platform/3.4.0/platform-3.4.0.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/com/ibm/icu/icu4j/66.1/icu4j-66.1.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/com/mojang/javabridge/1.0.22/javabridge-1.0.22.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/net/sf/jopt-simple/jopt-simple/5.0.3/jopt-simple-5.0.3.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/io/netty/netty-all/4.1.25.Final/netty-all-4.1.25.Final.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/com/google/guava/guava/21.0/guava-21.0.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/org/apache/commons/commons-lang3/3.5/commons-lang3-3.5.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/commons-io/commons-io/2.5/commons-io-2.5.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/commons-codec/commons-codec/1.10/commons-codec-1.10.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/net/java/jinput/jinput/2.0.5/jinput-2.0.5.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/net/java/jutils/jutils/1.0.0/jutils-1.0.0.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/com/mojang/brigadier/1.0.17/brigadier-1.0.17.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/com/mojang/datafixerupper/4.0.26/datafixerupper-4.0.26.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/com/google/code/gson/gson/2.8.0/gson-2.8.0.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/com/mojang/authlib/2.1.28/authlib-2.1.28.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/org/apache/commons/commons-compress/1.8.1/commons-compress-1.8.1.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/org/apache/httpcomponents/httpclient/4.3.3/httpclient-4.3.3.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/commons-logging/commons-logging/1.1.3/commons-logging-1.1.3.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/org/apache/httpcomponents/httpcore/4.3.2/httpcore-4.3.2.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/it/unimi/dsi/fastutil/8.2.1/fastutil-8.2.1.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/org/apache/logging/log4j/log4j-api/2.8.1/log4j-api-2.8.1.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/org/apache/logging/log4j/log4j-core/2.8.1/log4j-core-2.8.1.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/com/mojang/text2speech/1.11.3/text2speech-1.11.3.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/com/mojang/text2speech/1.11.3/text2speech-1.11.3.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/ca/weblite/java-objc-bridge/1.0.0/java-objc-bridge-1.0.0.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/ca/weblite/java-objc-bridge/1.0.0/java-objc-bridge-1.0.0.jar:/storage/emulated/0/HMCLPE/.minecraft/versions/1.16.5/1.16.5.jar",
+ "-Dfml.earlyprogresswindow=false",
+ "-Dorg.lwjgl.util.Debug=true",
+ "-Dorg.lwjgl.util.DebugFunctions=true",
+ "-Dorg.lwjgl.util.DebugLoader=true",
+ "-Dos.name=Linux",
+ "-Dlwjgl.platform=FCL",
+ "-Dorg.lwjgl.opengl.libname=${glLibName}",
+ "-Djava.io.tmpdir=/data/user/0/com.tungsten.fcl/cache",
+ "-Dminecraft.launcher.brand=FCL",
+ "-Dminecraft.launcher.version=1.0.0",
+ "-Xms1024M",
+ "-Xmx1024M",
+ "net.minecraft.client.main.Main",
+ "--username",
+ "Tunsgten",
+ "--version",
+ "1.16.5",
+ "--gameDir",
+ "/storage/emulated/0/HMCLPE/.minecraft/versions/1.16.5",
+ "--assetsDir",
+ "/storage/emulated/0/HMCLPE/.minecraft/assets",
+ "--assetIndex",
+ "1.16",
+ "--uuid",
+ "410efec2-313f-4346-aa2a-7708597ff92f",
+ "--accessToken",
+ "eyJhbGciOiJIUzI1NiJ9.eyJ4dWlkIjoiMjUzNTQyNTU3Mzk1OTc0MCIsImFnZyI6IkFkdWx0Iiwic3ViIjoiNzcyMDU1YzMtMjNhMi00NmE0LThjOTItODRiOTE5NDVkOTFhIiwibmJmIjoxNjY1NTc0MzExLCJhdXRoIjoiWEJPWCIsInJvbGVzIjpbXSwiaXNzIjoiYXV0aGVudGljYXRpb24iLCJleHAiOjE2NjU2NjA3MTEsImlhdCI6MTY2NTU3NDMxMSwicGxhdGZvcm0iOiJVTktOT1dOIiwieXVpZCI6IjFhYTRlNDM5MGVmMTgwZWE1M2Q2MjBkMzEyM2Y5YzE3In0.8jpLk9Wr_g-SxeJrHtGC7vSxu54I6gw-0g6hSdQiSYk",
+ "--userType",
+ "mojang",
+ "--versionType",
+ "release",
+ "--width",
+ "2000",
+ "--height",
+ "1200"
+ };
+
+ String[] args2 = new String[] {
+ getFilesDir() + "/java/bin/java",
+ "-cp",
+ "/data/user/0/com.tungsten.fcl/app_runtime/lwjgl2/lwjgl.jar:/data/user/0/com.tungsten.fcl/app_runtime/lwjgl2/lwjgl_util.jar:/storage/emulated/0/HMCLPE/.minecraft/versions/1.7.10/1.7.10.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/com/mojang/netty/1.8.8/netty-1.8.8.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/com/mojang/realms/1.3.5/realms-1.3.5.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/org/apache/commons/commons-compress/1.8.1/commons-compress-1.8.1.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/org/apache/httpcomponents/httpclient/4.3.3/httpclient-4.3.3.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/commons-logging/commons-logging/1.1.3/commons-logging-1.1.3.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/org/apache/httpcomponents/httpcore/4.3.2/httpcore-4.3.2.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/java3d/vecmath/1.3.1/vecmath-1.3.1.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/net/sf/trove4j/trove4j/3.0.3/trove4j-3.0.3.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/com/ibm/icu/icu4j-core-mojang/51.2/icu4j-core-mojang-51.2.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/net/sf/jopt-simple/jopt-simple/4.5/jopt-simple-4.5.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/com/paulscode/codecjorbis/20101023/codecjorbis-20101023.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/com/paulscode/codecwav/20101023/codecwav-20101023.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/com/paulscode/libraryjavasound/20101123/libraryjavasound-20101123.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/com/paulscode/librarylwjglopenal/20100824/librarylwjglopenal-20100824.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/com/paulscode/soundsystem/20120107/soundsystem-20120107.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/io/netty/netty-all/4.0.10.Final/netty-all-4.0.10.Final.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/com/google/guava/guava/15.0/guava-15.0.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/org/apache/commons/commons-lang3/3.1/commons-lang3-3.1.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/commons-io/commons-io/2.4/commons-io-2.4.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/commons-codec/commons-codec/1.9/commons-codec-1.9.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/net/java/jinput/jinput/2.0.5/jinput-2.0.5.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/net/java/jutils/jutils/1.0.0/jutils-1.0.0.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/com/google/code/gson/gson/2.2.4/gson-2.2.4.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/com/mojang/authlib/1.5.21/authlib-1.5.21.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/org/apache/logging/log4j/log4j-api/2.0-beta9/log4j-api-2.0-beta9.jar:/storage/emulated/0/HMCLPE/.minecraft/libraries/org/apache/logging/log4j/log4j-core/2.0-beta9/log4j-core-2.0-beta9.jar",
+ "-Dfml.earlyprogresswindow=false",
+ "-Dorg.lwjgl.util.Debug=true",
+ "-Dorg.lwjgl.util.DebugFunctions=true",
+ "-Dorg.lwjgl.util.DebugLoader=true",
+ "-Dos.name=Linux",
+ "-Dlwjgl.platform=FCL",
+ "-Dorg.lwjgl.opengl.libname=%s",
+ "-Djava.io.tmpdir=/data/user/0/com.tungsten.fcl/cache",
+ "-Dminecraft.launcher.brand=FCL",
+ "-Dminecraft.launcher.version=1.0.0",
+ "-Xms1024M",
+ "-Xmx1024M",
+ "net.minecraft.client.main.Main",
+ "--username",
+ "Tunsgten",
+ "--version",
+ "1.7.10",
+ "--gameDir",
+ "/storage/emulated/0/HMCLPE/.minecraft/versions/1.7.10",
+ "--assetsDir",
+ "/storage/emulated/0/HMCLPE/.minecraft/assets",
+ "--assetIndex",
+ "1.7.10",
+ "--uuid",
+ "410efec2-313f-4346-aa2a-7708597ff92f",
+ "--accessToken",
+ "eyJhbGciOiJIUzI1NiJ9.eyJ4dWlkIjoiMjUzNTQyNTU3Mzk1OTc0MCIsImFnZyI6IkFkdWx0Iiwic3ViIjoiNzcyMDU1YzMtMjNhMi00NmE0LThjOTItODRiOTE5NDVkOTFhIiwibmJmIjoxNjY1NTc0MzExLCJhdXRoIjoiWEJPWCIsInJvbGVzIjpbXSwiaXNzIjoiYXV0aGVudGljYXRpb24iLCJleHAiOjE2NjU2NjA3MTEsImlhdCI6MTY2NTU3NDMxMSwicGxhdGZvcm0iOiJVTktOT1dOIiwieXVpZCI6IjFhYTRlNDM5MGVmMTgwZWE1M2Q2MjBkMzEyM2Y5YzE3In0.8jpLk9Wr_g-SxeJrHtGC7vSxu54I6gw-0g6hSdQiSYk",
+ "--userProperties",
+ "{}",
+ "--userType",
+ "mojang",
+ "--width",
+ "2000",
+ "--height",
+ "1200"
+ };
+
+ TextureView textureView = findViewById(R.id.main);
+ textureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
+ @Override
+ public void onSurfaceTextureAvailable(@NonNull SurfaceTexture surfaceTexture, int i, int i1) {
+ FCLConfig config = new FCLConfig(MainActivity.this,
+ new Surface(surfaceTexture),
+ getExternalFilesDir("log").getAbsolutePath(),
+ getFilesDir() + "/java",
+ Environment.getExternalStorageDirectory() + "/HMCLPE/.minecraft",
+ FCLConfig.Renderer.RENDERER_GL4ES,
+ args3,
+ new FCLBridgeCallback() {
+ @Override
+ public void onCursorModeChange(int mode) {
+
+ }
+
+ @Override
+ public void onExit(int code) {
+
+ }
+ });
+ FCLauncher.launchMinecraft(config);
+ }
+
+ @Override
+ public void onSurfaceTextureSizeChanged(@NonNull SurfaceTexture surfaceTexture, int i, int i1) {
+
+ }
+
+ @Override
+ public boolean onSurfaceTextureDestroyed(@NonNull SurfaceTexture surfaceTexture) {
+ return false;
+ }
+
+ @Override
+ public void onSurfaceTextureUpdated(@NonNull SurfaceTexture surfaceTexture) {
+
+ }
+ });
+ }
+}
\ No newline at end of file
diff --git a/FCL/src/main/res/drawable-v24/ic_launcher_foreground.xml b/FCL/src/main/res/drawable-v24/ic_launcher_foreground.xml
new file mode 100644
index 000000000..2b068d114
--- /dev/null
+++ b/FCL/src/main/res/drawable-v24/ic_launcher_foreground.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/FCL/src/main/res/drawable/ic_launcher_background.xml b/FCL/src/main/res/drawable/ic_launcher_background.xml
new file mode 100644
index 000000000..07d5da9cb
--- /dev/null
+++ b/FCL/src/main/res/drawable/ic_launcher_background.xml
@@ -0,0 +1,170 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/FCL/src/main/res/layout/activity_main.xml b/FCL/src/main/res/layout/activity_main.xml
new file mode 100644
index 000000000..3f9788c89
--- /dev/null
+++ b/FCL/src/main/res/layout/activity_main.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/FCL/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/FCL/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100644
index 000000000..eca70cfe5
--- /dev/null
+++ b/FCL/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/FCL/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/FCL/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
new file mode 100644
index 000000000..eca70cfe5
--- /dev/null
+++ b/FCL/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/FCL/src/main/res/mipmap-hdpi/ic_launcher.webp b/FCL/src/main/res/mipmap-hdpi/ic_launcher.webp
new file mode 100644
index 000000000..c209e78ec
Binary files /dev/null and b/FCL/src/main/res/mipmap-hdpi/ic_launcher.webp differ
diff --git a/FCL/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/FCL/src/main/res/mipmap-hdpi/ic_launcher_round.webp
new file mode 100644
index 000000000..b2dfe3d1b
Binary files /dev/null and b/FCL/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ
diff --git a/FCL/src/main/res/mipmap-mdpi/ic_launcher.webp b/FCL/src/main/res/mipmap-mdpi/ic_launcher.webp
new file mode 100644
index 000000000..4f0f1d64e
Binary files /dev/null and b/FCL/src/main/res/mipmap-mdpi/ic_launcher.webp differ
diff --git a/FCL/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/FCL/src/main/res/mipmap-mdpi/ic_launcher_round.webp
new file mode 100644
index 000000000..62b611da0
Binary files /dev/null and b/FCL/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ
diff --git a/FCL/src/main/res/mipmap-xhdpi/ic_launcher.webp b/FCL/src/main/res/mipmap-xhdpi/ic_launcher.webp
new file mode 100644
index 000000000..948a3070f
Binary files /dev/null and b/FCL/src/main/res/mipmap-xhdpi/ic_launcher.webp differ
diff --git a/FCL/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/FCL/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
new file mode 100644
index 000000000..1b9a6956b
Binary files /dev/null and b/FCL/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ
diff --git a/FCL/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/FCL/src/main/res/mipmap-xxhdpi/ic_launcher.webp
new file mode 100644
index 000000000..28d4b77f9
Binary files /dev/null and b/FCL/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ
diff --git a/FCL/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/FCL/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
new file mode 100644
index 000000000..9287f5083
Binary files /dev/null and b/FCL/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ
diff --git a/FCL/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/FCL/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
new file mode 100644
index 000000000..aa7d6427e
Binary files /dev/null and b/FCL/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ
diff --git a/FCL/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/FCL/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
new file mode 100644
index 000000000..9126ae37c
Binary files /dev/null and b/FCL/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ
diff --git a/FCL/src/main/res/values-night/themes.xml b/FCL/src/main/res/values-night/themes.xml
new file mode 100644
index 000000000..e59b723ac
--- /dev/null
+++ b/FCL/src/main/res/values-night/themes.xml
@@ -0,0 +1,16 @@
+
+
+
+
\ No newline at end of file
diff --git a/FCL/src/main/res/values/colors.xml b/FCL/src/main/res/values/colors.xml
new file mode 100644
index 000000000..f8c6127d3
--- /dev/null
+++ b/FCL/src/main/res/values/colors.xml
@@ -0,0 +1,10 @@
+
+
+ #FFBB86FC
+ #FF6200EE
+ #FF3700B3
+ #FF03DAC5
+ #FF018786
+ #FF000000
+ #FFFFFFFF
+
\ No newline at end of file
diff --git a/FCL/src/main/res/values/strings.xml b/FCL/src/main/res/values/strings.xml
new file mode 100644
index 000000000..80542811d
--- /dev/null
+++ b/FCL/src/main/res/values/strings.xml
@@ -0,0 +1,3 @@
+
+ Fold Craft Launcher
+
\ No newline at end of file
diff --git a/FCL/src/main/res/values/themes.xml b/FCL/src/main/res/values/themes.xml
new file mode 100644
index 000000000..2734589a8
--- /dev/null
+++ b/FCL/src/main/res/values/themes.xml
@@ -0,0 +1,16 @@
+
+
+
+
\ No newline at end of file
diff --git a/FCL/src/main/res/xml/backup_rules.xml b/FCL/src/main/res/xml/backup_rules.xml
new file mode 100644
index 000000000..fa0f996d2
--- /dev/null
+++ b/FCL/src/main/res/xml/backup_rules.xml
@@ -0,0 +1,13 @@
+
+
+
+
\ No newline at end of file
diff --git a/FCL/src/main/res/xml/data_extraction_rules.xml b/FCL/src/main/res/xml/data_extraction_rules.xml
new file mode 100644
index 000000000..9ee9997b0
--- /dev/null
+++ b/FCL/src/main/res/xml/data_extraction_rules.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/FCL/src/test/java/com/tungsten/fcl/ExampleUnitTest.java b/FCL/src/test/java/com/tungsten/fcl/ExampleUnitTest.java
new file mode 100644
index 000000000..b4abb27eb
--- /dev/null
+++ b/FCL/src/test/java/com/tungsten/fcl/ExampleUnitTest.java
@@ -0,0 +1,17 @@
+package com.tungsten.fcl;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see Testing documentation
+ */
+public class ExampleUnitTest {
+ @Test
+ public void addition_isCorrect() {
+ assertEquals(4, 2 + 2);
+ }
+}
\ No newline at end of file
diff --git a/FCLCore/.gitignore b/FCLCore/.gitignore
new file mode 100644
index 000000000..42afabfd2
--- /dev/null
+++ b/FCLCore/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/FCLCore/build.gradle b/FCLCore/build.gradle
new file mode 100644
index 000000000..7c2134512
--- /dev/null
+++ b/FCLCore/build.gradle
@@ -0,0 +1,38 @@
+plugins {
+ id 'com.android.library'
+}
+
+android {
+ namespace 'com.tungsten.fclcore'
+ compileSdk 32
+
+ defaultConfig {
+ minSdk 23
+ targetSdk 32
+
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ consumerProguardFiles "consumer-rules.pro"
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+}
+
+dependencies {
+ implementation 'org.apache.commons:commons-lang3:3.12.0'
+ implementation 'org.jenkins-ci:constant-pool-scanner:1.2'
+ implementation 'com.google.code.gson:gson:2.9.0'
+ implementation 'androidx.appcompat:appcompat:1.5.1'
+ implementation 'com.google.android.material:material:1.6.1'
+ testImplementation 'junit:junit:4.13.2'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.3'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
+}
\ No newline at end of file
diff --git a/FCLCore/consumer-rules.pro b/FCLCore/consumer-rules.pro
new file mode 100644
index 000000000..e69de29bb
diff --git a/FCLCore/proguard-rules.pro b/FCLCore/proguard-rules.pro
new file mode 100644
index 000000000..481bb4348
--- /dev/null
+++ b/FCLCore/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/FCLCore/src/androidTest/java/com/tungsten/fclcore/ExampleInstrumentedTest.java b/FCLCore/src/androidTest/java/com/tungsten/fclcore/ExampleInstrumentedTest.java
new file mode 100644
index 000000000..0ee0ababb
--- /dev/null
+++ b/FCLCore/src/androidTest/java/com/tungsten/fclcore/ExampleInstrumentedTest.java
@@ -0,0 +1,26 @@
+package com.tungsten.fclcore;
+
+import android.content.Context;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see Testing documentation
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
+ assertEquals("com.tungsten.fclcore.test", appContext.getPackageName());
+ }
+}
\ No newline at end of file
diff --git a/FCLCore/src/main/AndroidManifest.xml b/FCLCore/src/main/AndroidManifest.xml
new file mode 100644
index 000000000..a5918e68a
--- /dev/null
+++ b/FCLCore/src/main/AndroidManifest.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/constant/UrlConstants.java b/FCLCore/src/main/java/com/tungsten/fclcore/constant/UrlConstants.java
new file mode 100644
index 000000000..304b56d3f
--- /dev/null
+++ b/FCLCore/src/main/java/com/tungsten/fclcore/constant/UrlConstants.java
@@ -0,0 +1,9 @@
+package com.tungsten.fclcore.constant;
+
+public class UrlConstants {
+
+ public static final String DEFAULT_LIBRARY_URL = "https://libraries.minecraft.net/";
+ public static final String DEFAULT_VERSION_DOWNLOAD_URL = "https://s3.amazonaws.com/Minecraft.Download/versions/";
+ public static final String DEFAULT_INDEX_URL = "https://s3.amazonaws.com/Minecraft.Download/indexes/";
+
+}
diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/download/AbstractDependencyManager.java b/FCLCore/src/main/java/com/tungsten/fclcore/download/AbstractDependencyManager.java
new file mode 100644
index 000000000..1081f87fd
--- /dev/null
+++ b/FCLCore/src/main/java/com/tungsten/fclcore/download/AbstractDependencyManager.java
@@ -0,0 +1,14 @@
+package com.tungsten.fclcore.download;
+
+public abstract class AbstractDependencyManager implements DependencyManager {
+
+ public abstract DownloadProvider getDownloadProvider();
+
+ @Override
+ public abstract DefaultCacheRepository getCacheRepository();
+
+ @Override
+ public VersionList> getVersionList(String id) {
+ return getDownloadProvider().getVersionListById(id);
+ }
+}
diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/download/AdaptedDownloadProvider.java b/FCLCore/src/main/java/com/tungsten/fclcore/download/AdaptedDownloadProvider.java
new file mode 100644
index 000000000..5dc86da05
--- /dev/null
+++ b/FCLCore/src/main/java/com/tungsten/fclcore/download/AdaptedDownloadProvider.java
@@ -0,0 +1,72 @@
+package com.tungsten.fclcore.download;
+
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * The download provider that changes the real download source in need.
+ */
+public class AdaptedDownloadProvider implements DownloadProvider {
+
+ private List downloadProviderCandidates;
+
+ public void setDownloadProviderCandidates(List downloadProviderCandidates) {
+ this.downloadProviderCandidates = new ArrayList<>(downloadProviderCandidates);
+ }
+
+ public DownloadProvider getPreferredDownloadProvider() {
+ List d = downloadProviderCandidates;
+ if (d == null || d.isEmpty()) {
+ throw new IllegalStateException("No download provider candidate");
+ }
+ return d.get(0);
+ }
+
+ @Override
+ public String getVersionListURL() {
+ return getPreferredDownloadProvider().getVersionListURL();
+ }
+
+ @Override
+ public String getAssetBaseURL() {
+ return getPreferredDownloadProvider().getAssetBaseURL();
+ }
+
+ @Override
+ public String injectURL(String baseURL) {
+ return getPreferredDownloadProvider().injectURL(baseURL);
+ }
+
+ @Override
+ public List getAssetObjectCandidates(String assetObjectLocation) {
+ return downloadProviderCandidates.stream()
+ .flatMap(d -> d.getAssetObjectCandidates(assetObjectLocation).stream())
+ .collect(Collectors.toList());
+ }
+
+ @Override
+ public List injectURLWithCandidates(String baseURL) {
+ return downloadProviderCandidates.stream()
+ .flatMap(d -> d.injectURLWithCandidates(baseURL).stream())
+ .collect(Collectors.toList());
+ }
+
+ @Override
+ public List injectURLsWithCandidates(List urls) {
+ return downloadProviderCandidates.stream()
+ .flatMap(d -> d.injectURLsWithCandidates(urls).stream())
+ .collect(Collectors.toList());
+ }
+
+ @Override
+ public VersionList> getVersionListById(String id) {
+ return getPreferredDownloadProvider().getVersionListById(id);
+ }
+
+ @Override
+ public int getConcurrency() {
+ return getPreferredDownloadProvider().getConcurrency();
+ }
+}
diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/download/ArtifactMalformedException.java b/FCLCore/src/main/java/com/tungsten/fclcore/download/ArtifactMalformedException.java
new file mode 100644
index 000000000..4712a7477
--- /dev/null
+++ b/FCLCore/src/main/java/com/tungsten/fclcore/download/ArtifactMalformedException.java
@@ -0,0 +1,14 @@
+package com.tungsten.fclcore.download;
+
+import java.io.IOException;
+
+public class ArtifactMalformedException extends IOException {
+ public ArtifactMalformedException(String message) {
+ super(message);
+ }
+
+ public ArtifactMalformedException(String message, Throwable cause) {
+ super(message, cause);
+ }
+}
+
diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/download/AutoDownloadProvider.java b/FCLCore/src/main/java/com/tungsten/fclcore/download/AutoDownloadProvider.java
new file mode 100644
index 000000000..9b4ae513c
--- /dev/null
+++ b/FCLCore/src/main/java/com/tungsten/fclcore/download/AutoDownloadProvider.java
@@ -0,0 +1,58 @@
+package com.tungsten.fclcore.download;
+
+import java.net.URL;
+import java.util.List;
+
+/**
+ * Official Download Provider fetches version list from Mojang and
+ * download files from mcbbs.
+ */
+public class AutoDownloadProvider implements DownloadProvider {
+ private final DownloadProvider versionListProvider;
+ private final DownloadProvider fileProvider;
+
+ public AutoDownloadProvider(DownloadProvider versionListProvider, DownloadProvider fileProvider) {
+ this.versionListProvider = versionListProvider;
+ this.fileProvider = fileProvider;
+ }
+
+ @Override
+ public String getVersionListURL() {
+ return versionListProvider.getVersionListURL();
+ }
+
+ @Override
+ public String getAssetBaseURL() {
+ return fileProvider.getAssetBaseURL();
+ }
+
+ @Override
+ public String injectURL(String baseURL) {
+ return fileProvider.injectURL(baseURL);
+ }
+
+ @Override
+ public List getAssetObjectCandidates(String assetObjectLocation) {
+ return fileProvider.getAssetObjectCandidates(assetObjectLocation);
+ }
+
+ @Override
+ public List injectURLWithCandidates(String baseURL) {
+ return fileProvider.injectURLWithCandidates(baseURL);
+ }
+
+ @Override
+ public List injectURLsWithCandidates(List urls) {
+ return fileProvider.injectURLsWithCandidates(urls);
+ }
+
+ @Override
+ public VersionList> getVersionListById(String id) {
+ return versionListProvider.getVersionListById(id);
+ }
+
+ @Override
+ public int getConcurrency() {
+ return fileProvider.getConcurrency();
+ }
+}
diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/download/BMCLAPIDownloadProvider.java b/FCLCore/src/main/java/com/tungsten/fclcore/download/BMCLAPIDownloadProvider.java
new file mode 100644
index 000000000..6f6827b5b
--- /dev/null
+++ b/FCLCore/src/main/java/com/tungsten/fclcore/download/BMCLAPIDownloadProvider.java
@@ -0,0 +1,96 @@
+package com.tungsten.fclcore.download;
+
+import com.tungsten.fclcore.download.fabric.FabricAPIVersionList;
+import com.tungsten.fclcore.download.fabric.FabricVersionList;
+import com.tungsten.fclcore.download.forge.ForgeBMCLVersionList;
+import com.tungsten.fclcore.download.game.GameVersionList;
+import com.tungsten.fclcore.download.liteloader.LiteLoaderBMCLVersionList;
+import com.tungsten.fclcore.download.optifine.OptiFineBMCLVersionList;
+import com.tungsten.fclcore.download.quilt.QuiltAPIVersionList;
+import com.tungsten.fclcore.download.quilt.QuiltVersionList;
+
+public class BMCLAPIDownloadProvider implements DownloadProvider {
+ private final String apiRoot;
+ private final GameVersionList game;
+ private final FabricVersionList fabric;
+ private final FabricAPIVersionList fabricApi;
+ private final ForgeBMCLVersionList forge;
+ private final LiteLoaderBMCLVersionList liteLoader;
+ private final OptiFineBMCLVersionList optifine;
+ private final QuiltVersionList quilt;
+ private final QuiltAPIVersionList quiltApi;
+
+ public BMCLAPIDownloadProvider(String apiRoot) {
+ this.apiRoot = apiRoot;
+ this.game = new GameVersionList(this);
+ this.fabric = new FabricVersionList(this);
+ this.fabricApi = new FabricAPIVersionList(this);
+ this.forge = new ForgeBMCLVersionList(apiRoot);
+ this.liteLoader = new LiteLoaderBMCLVersionList(this);
+ this.optifine = new OptiFineBMCLVersionList(apiRoot);
+ this.quilt = new QuiltVersionList(this);
+ this.quiltApi = new QuiltAPIVersionList(this);
+ }
+
+ public String getApiRoot() {
+ return apiRoot;
+ }
+
+ @Override
+ public String getVersionListURL() {
+ return apiRoot + "/mc/game/version_manifest.json";
+ }
+
+ @Override
+ public String getAssetBaseURL() {
+ return apiRoot + "/assets/";
+ }
+
+ @Override
+ public VersionList> getVersionListById(String id) {
+ switch (id) {
+ case "game":
+ return game;
+ case "fabric":
+ return fabric;
+ case "fabric-api":
+ return fabricApi;
+ case "forge":
+ return forge;
+ case "liteloader":
+ return liteLoader;
+ case "optifine":
+ return optifine;
+ case "quilt":
+ return quilt;
+ case "quilt-api":
+ return quiltApi;
+ default:
+ throw new IllegalArgumentException("Unrecognized version list id: " + id);
+ }
+ }
+
+ @Override
+ public String injectURL(String baseURL) {
+ return baseURL
+ .replace("https://bmclapi2.bangbang93.com", apiRoot)
+ .replace("https://launchermeta.mojang.com", apiRoot)
+ .replace("https://piston-meta.mojang.com", apiRoot)
+ .replace("https://piston-data.mojang.com", apiRoot)
+ .replace("https://launcher.mojang.com", apiRoot)
+ .replace("https://libraries.minecraft.net", apiRoot + "/libraries")
+ .replaceFirst("https?://files\\.minecraftforge\\.net/maven", apiRoot + "/maven")
+ .replace("https://maven.minecraftforge.net", apiRoot + "/maven")
+ .replace("http://dl.liteloader.com/versions/versions.json", apiRoot + "/maven/com/mumfrey/liteloader/versions.json")
+ .replace("http://dl.liteloader.com/versions", apiRoot + "/maven")
+ .replace("https://meta.fabricmc.net", apiRoot + "/fabric-meta")
+ .replace("https://maven.fabricmc.net", apiRoot + "/maven")
+ .replace("https://authlib-injector.yushi.moe", apiRoot + "/mirrors/authlib-injector")
+ .replace("https://repo1.maven.org/maven2", "https://maven.aliyun.com/repository/central");
+ }
+
+ @Override
+ public int getConcurrency() {
+ return Math.max(Runtime.getRuntime().availableProcessors() * 2, 6);
+ }
+}
diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/download/BalancedDownloadProvider.java b/FCLCore/src/main/java/com/tungsten/fclcore/download/BalancedDownloadProvider.java
new file mode 100644
index 000000000..2a239e9e0
--- /dev/null
+++ b/FCLCore/src/main/java/com/tungsten/fclcore/download/BalancedDownloadProvider.java
@@ -0,0 +1,51 @@
+package com.tungsten.fclcore.download;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * Official Download Provider fetches version list from Mojang and
+ * download files from mcbbs.
+ */
+public class BalancedDownloadProvider implements DownloadProvider {
+ List candidates;
+
+ Map> versionLists = new HashMap<>();
+
+ public BalancedDownloadProvider(List candidates) {
+ this.candidates = candidates;
+ }
+
+ @Override
+ public String getVersionListURL() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String getAssetBaseURL() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String injectURL(String baseURL) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public VersionList> getVersionListById(String id) {
+ if (!versionLists.containsKey(id)) {
+ versionLists.put(id, new MultipleSourceVersionList(
+ candidates.stream()
+ .map(downloadProvider -> downloadProvider.getVersionListById(id))
+ .collect(Collectors.toList())));
+ }
+ return versionLists.get(id);
+ }
+
+ @Override
+ public int getConcurrency() {
+ throw new UnsupportedOperationException();
+ }
+}
diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/download/DefaultCacheRepository.java b/FCLCore/src/main/java/com/tungsten/fclcore/download/DefaultCacheRepository.java
new file mode 100644
index 000000000..dd5787471
--- /dev/null
+++ b/FCLCore/src/main/java/com/tungsten/fclcore/download/DefaultCacheRepository.java
@@ -0,0 +1,283 @@
+package com.tungsten.fclcore.download;
+
+import com.google.gson.JsonParseException;
+import com.tungsten.fclcore.download.game.LibraryDownloadTask;
+import com.tungsten.fclcore.game.Library;
+import com.tungsten.fclcore.game.LibraryDownloadInfo;
+import com.tungsten.fclcore.util.CacheRepository;
+import com.tungsten.fclcore.util.DigestUtils;
+import com.tungsten.fclcore.util.Hex;
+import com.tungsten.fclcore.util.Logging;
+import com.tungsten.fclcore.util.gson.JsonUtils;
+import com.tungsten.fclcore.util.gson.TolerableValidationException;
+import com.tungsten.fclcore.util.gson.Validation;
+import com.tungsten.fclcore.util.io.FileUtils;
+
+import org.jetbrains.annotations.NotNull;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.*;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReadWriteLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+import java.util.logging.Level;
+import java.util.stream.Collectors;
+
+public class DefaultCacheRepository extends CacheRepository {
+ private Path librariesDir;
+ private Path indexFile;
+ private final ReadWriteLock lock = new ReentrantReadWriteLock();
+ private Index index = null;
+
+ public DefaultCacheRepository() {
+ this(OperatingSystem.getWorkingDirectory("minecraft"));
+ }
+
+ public DefaultCacheRepository(Path commonDirectory) {
+ changeDirectory(commonDirectory);
+ }
+
+ @Override
+ public void changeDirectory(Path commonDir) {
+ super.changeDirectory(commonDir);
+
+ librariesDir = commonDir.resolve("libraries");
+ indexFile = getCacheDirectory().resolve("index.json");
+
+ lock.writeLock().lock();
+ try {
+ if (Files.isRegularFile(indexFile))
+ index = JsonUtils.fromNonNullJson(FileUtils.readText(indexFile.toFile()), Index.class);
+ else
+ index = new Index();
+ } catch (IOException | JsonParseException e) {
+ Logging.LOG.log(Level.WARNING, "Unable to read index file", e);
+ index = new Index();
+ } finally {
+ lock.writeLock().unlock();
+ }
+ }
+
+ /**
+ * Try to cache the library given.
+ * This library will be cached only if it is verified.
+ * If cannot be verified, the library will not be cached.
+ *
+ * @param library the library being cached
+ * @param jar the file of library
+ */
+ public void tryCacheLibrary(Library library, Path jar) {
+ lock.readLock().lock();
+ try {
+ if (index.getLibraries().stream().anyMatch(it -> library.getName().equals(it.getName())))
+ return;
+ } finally {
+ lock.readLock().unlock();
+ }
+
+ try {
+ LibraryDownloadInfo info = library.getDownload();
+ String hash = info.getSha1();
+ if (hash != null) {
+ String checksum = Hex.encodeHex(DigestUtils.digest("SHA-1", jar));
+ if (hash.equalsIgnoreCase(checksum))
+ cacheLibrary(library, jar, false);
+ } else if (library.getChecksums() != null && !library.getChecksums().isEmpty()) {
+ if (LibraryDownloadTask.checksumValid(jar.toFile(), library.getChecksums()))
+ cacheLibrary(library, jar, true);
+ } else {
+ // or we will not cache the library
+ }
+ } catch (IOException e) {
+ Logging.LOG.log(Level.WARNING, "Unable to calc hash value of file " + jar, e);
+ }
+ }
+
+ /**
+ * Get the path of cached library, empty if not cached
+ *
+ * @param library the library we check if cached.
+ * @return the cached path if exists, otherwise empty
+ */
+ public Optional getLibrary(Library library) {
+ LibraryDownloadInfo info = library.getDownload();
+ String hash = info.getSha1();
+
+ if (fileExists(SHA1, hash))
+ return Optional.of(getFile(SHA1, hash));
+
+ Lock readLock = lock.readLock();
+ readLock.lock();
+
+ try {
+ // check if this library is from Forge
+ List libraries = index.getLibraries().stream()
+ .filter(it -> it.getName().equals(library.getName()))
+ .collect(Collectors.toList());
+ for (LibraryIndex libIndex : libraries) {
+ if (fileExists(SHA1, libIndex.getHash())) {
+ Path file = getFile(SHA1, libIndex.getHash());
+ if (libIndex.getType().equalsIgnoreCase(LibraryIndex.TYPE_FORGE)) {
+ if (LibraryDownloadTask.checksumValid(file.toFile(), library.getChecksums()))
+ return Optional.of(file);
+ }
+ }
+ }
+ } finally {
+ readLock.unlock();
+ }
+
+ // check old common directory
+ Path jar = librariesDir.resolve(info.getPath());
+ if (Files.exists(jar)) {
+ try {
+ if (hash != null) {
+ String checksum = Hex.encodeHex(DigestUtils.digest("SHA-1", jar));
+ if (hash.equalsIgnoreCase(checksum))
+ return Optional.of(restore(jar, () -> cacheLibrary(library, jar, false)));
+ } else if (library.getChecksums() != null && !library.getChecksums().isEmpty()) {
+ if (LibraryDownloadTask.checksumValid(jar.toFile(), library.getChecksums()))
+ return Optional.of(restore(jar, () -> cacheLibrary(library, jar, true)));
+ } else {
+ return Optional.of(jar);
+ }
+ } catch (IOException e) {
+ // we cannot check the hashcode or unable to move file.
+ }
+ }
+
+ return Optional.empty();
+ }
+
+ /**
+ * Caches the library file to repository.
+ *
+ * @param library the library to cache
+ * @param path the file being cached, must be verified
+ * @param forge true if this library is provided by Forge
+ * @return cached file location
+ * @throws IOException if failed to calculate hash code of {@code path} or copy the file to cache
+ */
+ public Path cacheLibrary(Library library, Path path, boolean forge) throws IOException {
+ String hash = library.getDownload().getSha1();
+ if (hash == null)
+ hash = Hex.encodeHex(DigestUtils.digest(SHA1, path));
+
+ Path cache = getFile(SHA1, hash);
+ FileUtils.copyFile(path.toFile(), cache.toFile());
+
+ Lock writeLock = lock.writeLock();
+ writeLock.lock();
+ try {
+ LibraryIndex libIndex = new LibraryIndex(library.getName(), hash, forge ? LibraryIndex.TYPE_FORGE : LibraryIndex.TYPE_JAR);
+ index.getLibraries().add(libIndex);
+ saveIndex();
+ } finally {
+ writeLock.unlock();
+ }
+
+ return cache;
+ }
+
+ private void saveIndex() {
+ if (indexFile == null || index == null) return;
+ try {
+ FileUtils.writeText(indexFile.toFile(), JsonUtils.GSON.toJson(index));
+ } catch (IOException e) {
+ Logging.LOG.log(Level.SEVERE, "Unable to save index.json", e);
+ }
+ }
+
+ /**
+ * {
+ * "libraries": {
+ * // allow a library has multiple hash code.
+ * [
+ * "name": "net.minecraftforge:forge:1.11.2-13.20.0.2345",
+ * "hash": "blablabla",
+ * "type": "forge"
+ * ]
+ * }
+ * // assets and versions will not be included in index.
+ * }
+ */
+ private class Index implements Validation {
+ private final Set libraries;
+
+ public Index() {
+ this(new HashSet<>());
+ }
+
+ public Index(Set libraries) {
+ this.libraries = Objects.requireNonNull(libraries);
+ }
+
+ @NotNull
+ public Set getLibraries() {
+ return libraries;
+ }
+
+ @Override
+ public void validate() throws JsonParseException, TolerableValidationException {
+ if (libraries == null)
+ throw new JsonParseException("Index.libraries cannot be null");
+ }
+ }
+
+ private class LibraryIndex implements Validation {
+ private final String name;
+ private final String hash;
+ private final String type;
+
+ public LibraryIndex() {
+ this("", "", "");
+ }
+
+ public LibraryIndex(String name, String hash, String type) {
+ this.name = name;
+ this.hash = hash;
+ this.type = type;
+ }
+
+ @NotNull
+ public String getName() {
+ return name;
+ }
+
+ @NotNull
+ public String getHash() {
+ return hash;
+ }
+
+ @NotNull
+ public String getType() {
+ return type;
+ }
+
+ @Override
+ public void validate() throws JsonParseException, TolerableValidationException {
+ if (name == null || hash == null || type == null)
+ throw new JsonParseException("Index.LibraryIndex.* cannot be null");
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ LibraryIndex that = (LibraryIndex) o;
+ return Objects.equals(name, that.name) &&
+ Objects.equals(hash, that.hash) &&
+ Objects.equals(type, that.type);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(name, hash, type);
+ }
+
+ public static final String TYPE_FORGE = "forge";
+ public static final String TYPE_JAR = "jar";
+ }
+}
diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/download/DefaultDependencyManager.java b/FCLCore/src/main/java/com/tungsten/fclcore/download/DefaultDependencyManager.java
new file mode 100644
index 000000000..dd2a8e1c4
--- /dev/null
+++ b/FCLCore/src/main/java/com/tungsten/fclcore/download/DefaultDependencyManager.java
@@ -0,0 +1,200 @@
+package com.tungsten.fclcore.download;
+
+import com.tungsten.fclcore.download.forge.ForgeInstallTask;
+import com.tungsten.fclcore.download.game.GameAssetDownloadTask;
+import com.tungsten.fclcore.download.game.GameDownloadTask;
+import com.tungsten.fclcore.download.game.GameLibrariesTask;
+import com.tungsten.fclcore.download.optifine.OptiFineInstallTask;
+import com.tungsten.fclcore.game.Artifact;
+import com.tungsten.fclcore.game.DefaultGameRepository;
+import com.tungsten.fclcore.game.Library;
+import com.tungsten.fclcore.game.Version;
+import com.tungsten.fclcore.task.Task;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicReference;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * Note: This class has no state.
+ */
+public class DefaultDependencyManager extends AbstractDependencyManager {
+
+ private final DefaultGameRepository repository;
+ private final DownloadProvider downloadProvider;
+ private final DefaultCacheRepository cacheRepository;
+
+ public DefaultDependencyManager(DefaultGameRepository repository, DownloadProvider downloadProvider, DefaultCacheRepository cacheRepository) {
+ this.repository = repository;
+ this.downloadProvider = downloadProvider;
+ this.cacheRepository = cacheRepository;
+ }
+
+ @Override
+ public DefaultGameRepository getGameRepository() {
+ return repository;
+ }
+
+ @Override
+ public DownloadProvider getDownloadProvider() {
+ return downloadProvider;
+ }
+
+ @Override
+ public DefaultCacheRepository getCacheRepository() {
+ return cacheRepository;
+ }
+
+ @Override
+ public GameBuilder gameBuilder() {
+ return new DefaultGameBuilder(this);
+ }
+
+ @Override
+ public Task> checkGameCompletionAsync(Version version, boolean integrityCheck) {
+ return Task.allOf(
+ Task.composeAsync(() -> {
+ File versionJar = repository.getVersionJar(version);
+ if (!versionJar.exists() || versionJar.length() == 0)
+ return new GameDownloadTask(this, null, version);
+ else
+ return null;
+ }).thenComposeAsync(checkPatchCompletionAsync(version, integrityCheck)),
+ new GameAssetDownloadTask(this, version, GameAssetDownloadTask.DOWNLOAD_INDEX_IF_NECESSARY, integrityCheck),
+ new GameLibrariesTask(this, version, integrityCheck)
+ );
+ }
+
+ @Override
+ public Task> checkLibraryCompletionAsync(Version version, boolean integrityCheck) {
+ return new GameLibrariesTask(this, version, integrityCheck, version.getLibraries());
+ }
+
+ @Override
+ public Task> checkPatchCompletionAsync(Version version, boolean integrityCheck) {
+ return Task.composeAsync(() -> {
+ List> tasks = new ArrayList<>(0);
+
+ String gameVersion = repository.getGameVersion(version).orElse(null);
+ if (gameVersion == null) return null;
+
+ Version original = repository.getVersion(version.getId());
+ Version resolved = original.resolvePreservingPatches(repository);
+
+ LibraryAnalyzer analyzer = LibraryAnalyzer.analyze(resolved);
+ for (LibraryAnalyzer.LibraryType type : LibraryAnalyzer.LibraryType.values()) {
+ if (!analyzer.has(type))
+ continue;
+
+ if (type == LibraryAnalyzer.LibraryType.OPTIFINE) {
+ String optifinePatchVersion = analyzer.getVersion(type)
+ .map(optifineVersion -> {
+ Matcher matcher = Pattern.compile("^([0-9.]+)_(?HD_.+)$").matcher(optifineVersion);
+ return matcher.find() ? matcher.group("optifine") : optifineVersion;
+ })
+ .orElseGet(() -> resolved.getPatches().stream()
+ .filter(patch -> "optifine".equals(patch.getId()))
+ .findAny()
+ .map(Version::getVersion)
+ .orElse(null));
+
+ boolean needsReInstallation = version.getLibraries().stream()
+ .anyMatch(library -> !library.hasDownloadURL()
+ && "optifine".equals(library.getGroupId())
+ && GameLibrariesTask.shouldDownloadLibrary(repository, version, library, integrityCheck));
+
+ if (needsReInstallation) {
+ Library installer = new Library(new Artifact("optifine", "OptiFine", gameVersion + "_" + optifinePatchVersion, "installer"));
+ if (GameLibrariesTask.shouldDownloadLibrary(repository, version, installer, integrityCheck)) {
+ tasks.add(installLibraryAsync(gameVersion, original, "optifine", optifinePatchVersion));
+ } else {
+ tasks.add(OptiFineInstallTask.install(this, original, repository.getLibraryFile(version, installer).toPath()));
+ }
+ }
+ }
+ }
+
+ return Task.allOf(tasks);
+ });
+ }
+
+ @Override
+ public Task installLibraryAsync(String gameVersion, Version baseVersion, String libraryId, String libraryVersion) {
+ if (baseVersion.isResolved()) throw new IllegalArgumentException("Version should not be resolved");
+
+ VersionList> versionList = getVersionList(libraryId);
+ return Task.fromCompletableFuture(versionList.loadAsync(gameVersion))
+ .thenComposeAsync(() -> installLibraryAsync(baseVersion, versionList.getVersion(gameVersion, libraryVersion)
+ .orElseThrow(() -> new IOException("Remote library " + libraryId + " has no version " + libraryVersion))))
+ .withStage(String.format("hmcl.install.%s:%s", libraryId, libraryVersion));
+ }
+
+ @Override
+ public Task installLibraryAsync(Version baseVersion, RemoteVersion libraryVersion) {
+ if (baseVersion.isResolved()) throw new IllegalArgumentException("Version should not be resolved");
+
+ AtomicReference removedLibraryVersion = new AtomicReference<>();
+
+ return removeLibraryAsync(baseVersion.resolvePreservingPatches(repository), libraryVersion.getLibraryId())
+ .thenComposeAsync(version -> {
+ removedLibraryVersion.set(version);
+ return libraryVersion.getInstallTask(this, version);
+ })
+ .thenApplyAsync(patch -> {
+ if (patch == null) {
+ return removedLibraryVersion.get();
+ } else {
+ return removedLibraryVersion.get().addPatch(patch);
+ }
+ })
+ .withStage(String.format("hmcl.install.%s:%s", libraryVersion.getLibraryId(), libraryVersion.getSelfVersion()));
+ }
+
+ public Task installLibraryAsync(Version oldVersion, Path installer) {
+ if (oldVersion.isResolved()) throw new IllegalArgumentException("Version should not be resolved");
+
+ return Task
+ .composeAsync(() -> {
+ try {
+ return ForgeInstallTask.install(this, oldVersion, installer);
+ } catch (IOException ignore) {
+ }
+
+ try {
+ return OptiFineInstallTask.install(this, oldVersion, installer);
+ } catch (IOException ignore) {
+ }
+
+ throw new UnsupportedLibraryInstallerException();
+ })
+ .thenApplyAsync(oldVersion::addPatch);
+ }
+
+ public static class UnsupportedLibraryInstallerException extends Exception {
+ }
+
+ /**
+ * Remove installed library.
+ * Will try to remove libraries and patches.
+ *
+ * @param version not resolved version
+ * @param libraryId forge/liteloader/optifine/fabric
+ * @return task to remove the specified library
+ */
+ public Task removeLibraryAsync(Version version, String libraryId) {
+ // MaintainTask requires version that does not inherits from any version.
+ // If we want to remove a library in dependent version, we should keep the dependents not changed
+ // So resolving this game version to preserve all information in this version.json is necessary.
+ if (version.isResolved())
+ throw new IllegalArgumentException("removeLibraryWithoutSavingAsync requires non-resolved version");
+ Version independentVersion = version.resolvePreservingPatches(repository);
+
+ return Task.supplyAsync(() -> LibraryAnalyzer.analyze(independentVersion).removeLibrary(libraryId).build());
+ }
+
+}
diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/download/DefaultGameBuilder.java b/FCLCore/src/main/java/com/tungsten/fclcore/download/DefaultGameBuilder.java
new file mode 100644
index 000000000..0d4d3fd85
--- /dev/null
+++ b/FCLCore/src/main/java/com/tungsten/fclcore/download/DefaultGameBuilder.java
@@ -0,0 +1,51 @@
+package com.tungsten.fclcore.download;
+
+import com.tungsten.fclcore.game.Version;
+import com.tungsten.fclcore.task.Task;
+import com.tungsten.fclcore.util.function.ExceptionalFunction;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+public class DefaultGameBuilder extends GameBuilder {
+
+ private final DefaultDependencyManager dependencyManager;
+
+ public DefaultGameBuilder(DefaultDependencyManager dependencyManager) {
+ this.dependencyManager = dependencyManager;
+ }
+
+ public DefaultDependencyManager getDependencyManager() {
+ return dependencyManager;
+ }
+
+ @Override
+ public Task> buildAsync() {
+ List stages = new ArrayList<>();
+
+ Task libraryTask = Task.supplyAsync(() -> new Version(name));
+ libraryTask = libraryTask.thenComposeAsync(libraryTaskHelper(gameVersion, "game", gameVersion));
+ stages.add("hmcl.install.game:" + gameVersion);
+ stages.add("hmcl.install.assets");
+
+ for (Map.Entry entry : toolVersions.entrySet()) {
+ libraryTask = libraryTask.thenComposeAsync(libraryTaskHelper(gameVersion, entry.getKey(), entry.getValue()));
+ stages.add(String.format("hmcl.install.%s:%s", entry.getKey(), entry.getValue()));
+ }
+
+ for (RemoteVersion remoteVersion : remoteVersions) {
+ libraryTask = libraryTask.thenComposeAsync(version -> dependencyManager.installLibraryAsync(version, remoteVersion));
+ stages.add(String.format("hmcl.install.%s:%s", remoteVersion.getLibraryId(), remoteVersion.getSelfVersion()));
+ }
+
+ return libraryTask.thenComposeAsync(dependencyManager.getGameRepository()::saveAsync).whenComplete(exception -> {
+ if (exception != null)
+ dependencyManager.getGameRepository().removeVersionFromDisk(name);
+ }).withStagesHint(stages);
+ }
+
+ private ExceptionalFunction, ?> libraryTaskHelper(String gameVersion, String libraryId, String libraryVersion) {
+ return version -> dependencyManager.installLibraryAsync(gameVersion, version, libraryId, libraryVersion);
+ }
+}
diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/download/DependencyManager.java b/FCLCore/src/main/java/com/tungsten/fclcore/download/DependencyManager.java
new file mode 100644
index 000000000..dd342a75f
--- /dev/null
+++ b/FCLCore/src/main/java/com/tungsten/fclcore/download/DependencyManager.java
@@ -0,0 +1,84 @@
+package com.tungsten.fclcore.download;
+
+import com.tungsten.fclcore.game.GameRepository;
+import com.tungsten.fclcore.game.Version;
+import com.tungsten.fclcore.task.Task;
+import com.tungsten.fclcore.util.CacheRepository;
+
+/**
+ * Do everything that will connect to Internet.
+ * Downloading Minecraft files.
+ */
+public interface DependencyManager {
+
+ /**
+ * The relied game repository.
+ */
+ GameRepository getGameRepository();
+
+ /**
+ * The cache repository
+ */
+ CacheRepository getCacheRepository();
+
+ /**
+ * Check if the game is complete.
+ * Check libraries, assets files and so on.
+ *
+ * @return the task to check game completion.
+ */
+ Task> checkGameCompletionAsync(Version version, boolean integrityCheck);
+
+ /**
+ * Check if libraries of this version in complete.
+ * If not, download missing libraries if possible.
+ *
+ * @return the task to check game completion.
+ */
+ Task> checkLibraryCompletionAsync(Version version, boolean integrityCheck);
+
+ /**
+ * Check if patches of this version in complete.
+ * If not, reinstall the patch if possible.
+ *
+ * @param version the version to be checked
+ * @param integrityCheck check if some libraries are corrupt.
+ * @return the task to check patches completion.
+ */
+ Task> checkPatchCompletionAsync(Version version, boolean integrityCheck);
+
+ /**
+ * The builder to build a brand new game then libraries such as Forge, LiteLoader and OptiFine.
+ */
+ GameBuilder gameBuilder();
+
+ /**
+ * Install a library to a version.
+ * **Note**: Installing a library may change the version.json.
+ *
+ * @param gameVersion the Minecraft version that the library relies on.
+ * @param baseVersion the version.json.
+ * @param libraryId the type of being installed library. i.e. "forge", "liteloader", "optifine"
+ * @param libraryVersion the version of being installed library.
+ * @return the task to install the specific library.
+ */
+ Task> installLibraryAsync(String gameVersion, Version baseVersion, String libraryId, String libraryVersion);
+
+ /**
+ * Install a library to a version.
+ * **Note**: Installing a library may change the version.json.
+ *
+ * @param baseVersion the version.json.
+ * @param libraryVersion the remote version of being installed library.
+ * @return the task to install the specific library.
+ */
+ Task> installLibraryAsync(Version baseVersion, RemoteVersion libraryVersion);
+
+ /**
+ * Get registered version list.
+ *
+ * @param id the id of version list. i.e. game, forge, liteloader, optifine
+ * @throws IllegalArgumentException if the version list of specific id is not found.
+ */
+ VersionList> getVersionList(String id);
+}
diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/download/DownloadProvider.java b/FCLCore/src/main/java/com/tungsten/fclcore/download/DownloadProvider.java
new file mode 100644
index 000000000..7ed22583d
--- /dev/null
+++ b/FCLCore/src/main/java/com/tungsten/fclcore/download/DownloadProvider.java
@@ -0,0 +1,67 @@
+package com.tungsten.fclcore.download;
+
+import com.tungsten.fclcore.util.io.NetworkUtils;
+
+import java.net.URL;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * The service provider that provides Minecraft online file downloads.
+ *
+ * @author huangyuhui
+ */
+public interface DownloadProvider {
+
+ String getVersionListURL();
+
+ String getAssetBaseURL();
+
+ default List getAssetObjectCandidates(String assetObjectLocation) {
+ return Collections.singletonList(NetworkUtils.toURL(getAssetBaseURL() + assetObjectLocation));
+ }
+
+ /**
+ * Inject into original URL provided by Mojang and Forge.
+ *
+ * Since there are many provided URLs that are written in JSONs and are unmodifiable,
+ * this method provides a way to change them.
+ *
+ * @param baseURL original URL provided by Mojang and Forge.
+ * @return the URL that is equivalent to [baseURL], but belongs to your own service provider.
+ */
+ String injectURL(String baseURL);
+
+ /**
+ * Inject into original URL provided by Mojang and Forge.
+ *
+ * Since there are many provided URLs that are written in JSONs and are unmodifiable,
+ * this method provides a way to change them.
+ *
+ * @param baseURL original URL provided by Mojang and Forge.
+ * @return the URL that is equivalent to [baseURL], but belongs to your own service provider.
+ */
+ default List injectURLWithCandidates(String baseURL) {
+ return Collections.singletonList(NetworkUtils.toURL(injectURL(baseURL)));
+ }
+
+ default List injectURLsWithCandidates(List urls) {
+ return urls.stream().flatMap(url -> injectURLWithCandidates(url).stream()).collect(Collectors.toList());
+ }
+
+ /**
+ * the specific version list that this download provider provides. i.e. "fabric", "forge", "liteloader", "game", "optifine"
+ *
+ * @param id the id of specific version list that this download provider provides. i.e. "fabric", "forge", "liteloader", "game", "optifine"
+ * @return the version list
+ * @throws IllegalArgumentException if the version list does not exist
+ */
+ VersionList> getVersionListById(String id);
+
+ /**
+ * The maximum download concurrency that this download provider supports.
+ * @return the maximum download concurrency.
+ */
+ int getConcurrency();
+}
diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/download/GameBuilder.java b/FCLCore/src/main/java/com/tungsten/fclcore/download/GameBuilder.java
new file mode 100644
index 000000000..4a38fd8d5
--- /dev/null
+++ b/FCLCore/src/main/java/com/tungsten/fclcore/download/GameBuilder.java
@@ -0,0 +1,57 @@
+package com.tungsten.fclcore.download;
+
+import com.tungsten.fclcore.task.Task;
+
+import java.util.*;
+
+/**
+ * The builder which provide a task to build Minecraft environment.
+ */
+public abstract class GameBuilder {
+
+ protected String name = "";
+ protected String gameVersion = "";
+ protected final Map toolVersions = new HashMap<>();
+ protected final Set remoteVersions = new HashSet<>();
+
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * The new game version name, for .minecraft/<version name>.
+ *
+ * @param name the name of new game version.
+ */
+ public GameBuilder name(String name) {
+ this.name = Objects.requireNonNull(name);
+ return this;
+ }
+
+ public GameBuilder gameVersion(String version) {
+ this.gameVersion = Objects.requireNonNull(version);
+ return this;
+ }
+
+ /**
+ * @param id the core library id. i.e. "forge", "liteloader", "optifine"
+ * @param version the version of the core library. For documents, you can first try [VersionList.versions]
+ */
+ public GameBuilder version(String id, String version) {
+ if ("game".equals(id))
+ gameVersion(version);
+ else
+ toolVersions.put(id, version);
+ return this;
+ }
+
+ public GameBuilder version(RemoteVersion remoteVersion) {
+ remoteVersions.add(remoteVersion);
+ return this;
+ }
+
+ /**
+ * @return the task that can build thw whole Minecraft environment
+ */
+ public abstract Task> buildAsync();
+}
diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/download/LibraryAnalyzer.java b/FCLCore/src/main/java/com/tungsten/fclcore/download/LibraryAnalyzer.java
new file mode 100644
index 000000000..4f06ba31c
--- /dev/null
+++ b/FCLCore/src/main/java/com/tungsten/fclcore/download/LibraryAnalyzer.java
@@ -0,0 +1,256 @@
+package com.tungsten.fclcore.download;
+
+import static com.tungsten.fclcore.util.Pair.pair;
+
+import com.tungsten.fclcore.game.Library;
+import com.tungsten.fclcore.game.Version;
+import com.tungsten.fclcore.game.VersionProvider;
+import com.tungsten.fclcore.util.Pair;
+
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+// Todo : fix
+public final class LibraryAnalyzer implements Iterable {
+ private Version version;
+ private final Map> libraries;
+
+ private LibraryAnalyzer(Version version, Map> libraries) {
+ this.version = version;
+ this.libraries = libraries;
+ }
+
+ public String getVersion(LibraryType type) {
+ return getVersion(type.getPatchId());
+ }
+
+ public String getVersion(String type) {
+ return Objects.requireNonNull(libraries.get(type)).getValue();
+ }
+
+ public Library getLibrary(LibraryType type) {
+ return Objects.requireNonNull(libraries.get(type.getPatchId())).getKey();
+ }
+
+ @NotNull
+ @Override
+ public Iterator iterator() {
+ return new Iterator() {
+ Iterator>> impl = libraries.entrySet().iterator();
+
+ @Override
+ public boolean hasNext() {
+ return impl.hasNext();
+ }
+
+ @Override
+ public LibraryMark next() {
+ Map.Entry> entry = impl.next();
+ return new LibraryMark(entry.getKey(), entry.getValue().getValue());
+ }
+ };
+ }
+
+ public boolean has(LibraryType type) {
+ return has(type.getPatchId());
+ }
+
+ public boolean has(String type) {
+ return libraries.containsKey(type);
+ }
+
+ public boolean hasModLoader() {
+ for (String s : libraries.keySet()) {
+ if (Objects.requireNonNull(LibraryType.fromPatchId(s)).isModLoader()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public boolean hasModLauncher() {
+ final String modLauncher = "cpw.mods.modlauncher.Launcher";
+ boolean has = false;
+ for (Version patch : version.getPatches()) {
+ if (version.getMainClass().equals(modLauncher)) {
+ has = true;
+ break;
+ }
+ }
+ return modLauncher.equals(version.getMainClass()) || has;
+ }
+
+ public boolean hasBootstrapLauncher() {
+ final String bootstrapLauncher = "cpw.mods.bootstraplauncher.BootstrapLauncher";
+ boolean has = false;
+ for (Version patch : version.getPatches()) {
+ if (version.getMainClass().equals(bootstrapLauncher)) {
+ has = true;
+ break;
+ }
+ }
+ return bootstrapLauncher.equals(version.getMainClass()) || has;
+ }
+
+ private Version removingMatchedLibrary(Version version, String libraryId) {
+ LibraryType type = LibraryType.fromPatchId(libraryId);
+ if (type == null) return version;
+
+ List libraries = new ArrayList<>();
+ for (Library library : version.getLibraries()) {
+ if (type.matchLibrary(library)) {
+ // skip
+ } else {
+ libraries.add(library);
+ }
+ }
+ return version.setLibraries(libraries);
+ }
+
+ /**
+ * Remove library by library id
+ * @param libraryId patch id or "forge"/"optifine"/"liteloader"/"fabric"
+ * @return this
+ */
+ public LibraryAnalyzer removeLibrary(String libraryId) {
+ if (!has(libraryId)) return this;
+ List newPatches = new ArrayList<>();
+ for (Version p : version.getPatches()) {
+ removingMatchedLibrary(p, libraryId);
+ newPatches.add(p);
+ }
+ version = removingMatchedLibrary(version, libraryId).setPatches(newPatches);
+ return this;
+ }
+
+ public Version build() {
+ return version;
+ }
+
+ public static LibraryAnalyzer analyze(Version version) {
+ if (version.getInheritsFrom() != null)
+ throw new IllegalArgumentException("LibraryAnalyzer can only analyze independent game version");
+
+ Map> libraries = new HashMap<>();
+
+ for (Library library : version.resolve(null).getLibraries()) {
+ for (LibraryType type : LibraryType.values()) {
+ if (type.matchLibrary(library)) {
+ libraries.put(type.getPatchId(), pair(library, type.patchVersion(library.getVersion())));
+ break;
+ }
+ }
+ }
+
+ for (Version patch : version.getPatches()) {
+ if (patch.isHidden()) continue;
+ libraries.put(patch.getId(), pair(null, patch.getVersion()));
+ }
+
+ return new LibraryAnalyzer(version, libraries);
+ }
+
+ public static boolean isModded(VersionProvider provider, Version version) {
+ Version resolvedVersion = version.resolve(provider);
+ String mainClass = resolvedVersion.getMainClass();
+ return mainClass != null && (LAUNCH_WRAPPER_MAIN.equals(mainClass) || mainClass.startsWith("net.fabricmc") || mainClass.startsWith("cpw.mods"));
+ }
+
+ public enum LibraryType {
+ MINECRAFT(true, "game", Pattern.compile("^$"), Pattern.compile("^$")),
+ FABRIC(true, "fabric", Pattern.compile("net\\.fabricmc"), Pattern.compile("fabric-loader")),
+ FABRIC_API(true, "fabric-api", Pattern.compile("net\\.fabricmc"), Pattern.compile("fabric-api")),
+ FORGE(true, "forge", Pattern.compile("net\\.minecraftforge"), Pattern.compile("(forge|fmlloader)")) {
+ private final Pattern FORGE_VERSION_MATCHER = Pattern.compile("^([0-9.]+)-(?[0-9.]+)(-([0-9.]+))?$");
+
+ @Override
+ public String patchVersion(String libraryVersion) {
+ Matcher matcher = FORGE_VERSION_MATCHER.matcher(libraryVersion);
+ if (matcher.find()) {
+ return matcher.group("forge");
+ }
+ return super.patchVersion(libraryVersion);
+ }
+ },
+ LITELOADER(true, "liteloader", Pattern.compile("com\\.mumfrey"), Pattern.compile("liteloader")),
+ OPTIFINE(false, "optifine", Pattern.compile("(net\\.)?optifine"), Pattern.compile("^(?!.*launchwrapper).*$")),
+ QUILT(true, "quilt", Pattern.compile("org\\.quiltmc"), Pattern.compile("quilt-loader")),
+ QUILT_API(true, "quilt-api", Pattern.compile("org\\.quiltmc"), Pattern.compile("quilt-api")),
+ BOOTSTRAP_LAUNCHER(false, "", Pattern.compile("cpw\\.mods"), Pattern.compile("bootstraplauncher"));
+
+ private final boolean modLoader;
+ private final String patchId;
+ private final Pattern group, artifact;
+
+ LibraryType(boolean modLoader, String patchId, Pattern group, Pattern artifact) {
+ this.modLoader = modLoader;
+ this.patchId = patchId;
+ this.group = group;
+ this.artifact = artifact;
+ }
+
+ public boolean isModLoader() {
+ return modLoader;
+ }
+
+ public String getPatchId() {
+ return patchId;
+ }
+
+ public static LibraryType fromPatchId(String patchId) {
+ for (LibraryType type : values())
+ if (type.getPatchId().equals(patchId))
+ return type;
+ return null;
+ }
+
+ public boolean matchLibrary(Library library) {
+ return group.matcher(library.getGroupId()).matches() && artifact.matcher(library.getArtifactId()).matches();
+ }
+
+ public String patchVersion(String libraryVersion) {
+ return libraryVersion;
+ }
+ }
+
+ public static class LibraryMark {
+ private final String libraryId;
+ private final String libraryVersion;
+
+ public LibraryMark(@NotNull String libraryId, @Nullable String libraryVersion) {
+ this.libraryId = libraryId;
+ this.libraryVersion = libraryVersion;
+ }
+
+ @NotNull
+ public String getLibraryId() {
+ return libraryId;
+ }
+
+ @Nullable
+ public String getLibraryVersion() {
+ return libraryVersion;
+ }
+ }
+
+ public static final String VANILLA_MAIN = "net.minecraft.client.main.Main";
+ public static final String LAUNCH_WRAPPER_MAIN = "net.minecraft.launchwrapper.Launch";
+ public static final String MOD_LAUNCHER_MAIN = "cpw.mods.modlauncher.Launcher";
+ public static final String BOOTSTRAP_LAUNCHER_MAIN = "cpw.mods.bootstraplauncher.BootstrapLauncher";
+
+ public static final String[] FORGE_TWEAKERS = new String[] {
+ "net.minecraftforge.legacy._1_5_2.LibraryFixerTweaker", // 1.5.2
+ "cpw.mods.fml.common.launcher.FMLTweaker", // 1.6.1 ~ 1.7.10
+ "net.minecraftforge.fml.common.launcher.FMLTweaker" // 1.8 ~ 1.12.2
+ };
+ public static final String[] OPTIFINE_TWEAKERS = new String[] {
+ "optifine.OptiFineTweaker",
+ "optifine.OptiFineForgeTweaker"
+ };
+ public static final String LITELOADER_TWEAKER = "com.mumfrey.liteloader.launch.LiteLoaderTweaker";
+}
diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/download/MaintainTask.java b/FCLCore/src/main/java/com/tungsten/fclcore/download/MaintainTask.java
new file mode 100644
index 000000000..5fb3a7c8e
--- /dev/null
+++ b/FCLCore/src/main/java/com/tungsten/fclcore/download/MaintainTask.java
@@ -0,0 +1,339 @@
+package com.tungsten.fclcore.download;
+
+import static com.tungsten.fclcore.download.LibraryAnalyzer.LibraryType.BOOTSTRAP_LAUNCHER;
+import static com.tungsten.fclcore.download.LibraryAnalyzer.LibraryType.FORGE;
+import static com.tungsten.fclcore.download.LibraryAnalyzer.LibraryType.LITELOADER;
+import static com.tungsten.fclcore.download.LibraryAnalyzer.LibraryType.OPTIFINE;
+
+import com.tungsten.fclcore.game.Argument;
+import com.tungsten.fclcore.game.Artifact;
+import com.tungsten.fclcore.game.CompatibilityRule;
+import com.tungsten.fclcore.game.GameRepository;
+import com.tungsten.fclcore.game.Library;
+import com.tungsten.fclcore.game.StringArgument;
+import com.tungsten.fclcore.game.Version;
+import com.tungsten.fclcore.game.VersionLibraryBuilder;
+import com.tungsten.fclcore.task.Task;
+import com.tungsten.fclcore.util.SimpleMultimap;
+import com.tungsten.fclcore.util.StringUtils;
+import com.tungsten.fclcore.util.gson.JsonUtils;
+import com.tungsten.fclcore.util.versioning.VersionNumber;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
+import java.util.*;
+import java.util.logging.Level;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+public class MaintainTask extends Task {
+ private final GameRepository repository;
+ private final Version version;
+
+ public MaintainTask(GameRepository repository, Version version) {
+ this.repository = repository;
+ this.version = version;
+
+ if (version.getInheritsFrom() != null)
+ throw new IllegalArgumentException("MaintainTask requires independent game version");
+ }
+
+ @Override
+ public void execute() {
+ setResult(maintain(repository, version));
+ }
+
+ public static Version maintain(GameRepository repository, Version version) {
+ if (version.getInheritsFrom() != null)
+ throw new IllegalArgumentException("MaintainTask requires independent game version");
+
+ String mainClass = version.resolve(null).getMainClass();
+
+ if (mainClass != null && mainClass.equals(LibraryAnalyzer.LAUNCH_WRAPPER_MAIN)) {
+ version = maintainOptiFineLibrary(repository, maintainGameWithLaunchWrapper(unique(version), true), false);
+ } else if (mainClass != null && mainClass.equals(LibraryAnalyzer.MOD_LAUNCHER_MAIN)) {
+ // Forge 1.13 and OptiFine
+ version = maintainOptiFineLibrary(repository, maintainGameWithCpwModLauncher(repository, unique(version)), true);
+ } else if (mainClass != null && mainClass.equals(LibraryAnalyzer.BOOTSTRAP_LAUNCHER_MAIN)) {
+ // Forge 1.17
+ version = maintainGameWithCpwBoostrapLauncher(repository, unique(version));
+ } else {
+ // Vanilla Minecraft does not need maintain
+ // Fabric does not need maintain, nothing compatible with fabric now.
+ version = maintainOptiFineLibrary(repository, unique(version), false);
+ }
+
+ List libraries = version.getLibraries();
+ if (libraries.size() > 0) {
+ Library library = libraries.get(0);
+ if ("org.glavo".equals(library.getGroupId())
+ && ("log4j-patch".equals(library.getArtifactId()) || "log4j-patch-beta9".equals(library.getArtifactId()))
+ && "1.0".equals(library.getVersion())
+ && library.getDownload() == null) {
+ version = version.setLibraries(libraries.subList(1, libraries.size()));
+ }
+ }
+
+ return version;
+ }
+
+ public static Version maintainPreservingPatches(GameRepository repository, Version version) {
+ if (!version.isResolvedPreservingPatches())
+ throw new IllegalArgumentException("MaintainTask requires independent game version");
+ Version newVersion = maintain(repository, version.resolve(repository));
+ return newVersion.setPatches(version.getPatches()).markAsUnresolved();
+ }
+
+ private static Version maintainGameWithLaunchWrapper(Version version, boolean reorderTweakClass) {
+ LibraryAnalyzer libraryAnalyzer = LibraryAnalyzer.analyze(version);
+ VersionLibraryBuilder builder = new VersionLibraryBuilder(version);
+ String mainClass = null;
+
+ // Installing Forge will override the Minecraft arguments in json, so LiteLoader and OptiFine Tweaker are being re-added.
+ if (libraryAnalyzer.has(LITELOADER) && !libraryAnalyzer.hasModLauncher()) {
+ builder.replaceTweakClass(LibraryAnalyzer.LITELOADER_TWEAKER, LibraryAnalyzer.LITELOADER_TWEAKER, !reorderTweakClass, reorderTweakClass);
+ } else {
+ builder.removeTweakClass(LibraryAnalyzer.LITELOADER_TWEAKER);
+ }
+
+ if (libraryAnalyzer.has(OPTIFINE)) {
+ if (!libraryAnalyzer.has(LITELOADER) && !libraryAnalyzer.has(FORGE)) {
+ if (builder.hasTweakClass(LibraryAnalyzer.OPTIFINE_TWEAKERS[1])) {
+ builder.replaceTweakClass(LibraryAnalyzer.OPTIFINE_TWEAKERS[1], LibraryAnalyzer.OPTIFINE_TWEAKERS[0], !reorderTweakClass, reorderTweakClass);
+ }
+ } else {
+ if (libraryAnalyzer.hasModLauncher()) {
+ // If ModLauncher installed, we use ModLauncher in place of LaunchWrapper.
+ mainClass = LibraryAnalyzer.MOD_LAUNCHER_MAIN;
+ for (String optiFineTweaker : LibraryAnalyzer.OPTIFINE_TWEAKERS) {
+ builder.removeTweakClass(optiFineTweaker);
+ }
+ } else if (builder.hasTweakClass(LibraryAnalyzer.OPTIFINE_TWEAKERS[0])) {
+ // If forge or LiteLoader installed, OptiFine Forge Tweaker is needed.
+ builder.replaceTweakClass(LibraryAnalyzer.OPTIFINE_TWEAKERS[0], LibraryAnalyzer.OPTIFINE_TWEAKERS[1], !reorderTweakClass, reorderTweakClass);
+ }
+
+ }
+ } else {
+ for (String optiFineTweaker : LibraryAnalyzer.OPTIFINE_TWEAKERS) {
+ builder.removeTweakClass(optiFineTweaker);
+ }
+ }
+
+ boolean hasForge = libraryAnalyzer.has(FORGE), hasModLauncher = libraryAnalyzer.hasModLauncher();
+ for (String forgeTweaker : LibraryAnalyzer.FORGE_TWEAKERS) {
+ if (!hasForge) {
+ builder.removeTweakClass(forgeTweaker);
+ } else if (!hasModLauncher && builder.hasTweakClass(forgeTweaker)) {
+ builder.replaceTweakClass(forgeTweaker, forgeTweaker, !reorderTweakClass, reorderTweakClass);
+ }
+ }
+
+ Version ret = builder.build();
+ return mainClass == null ? ret : ret.setMainClass(mainClass);
+ }
+
+ private static Version maintainGameWithCpwModLauncher(GameRepository repository, Version version) {
+ LibraryAnalyzer libraryAnalyzer = LibraryAnalyzer.analyze(version);
+ VersionLibraryBuilder builder = new VersionLibraryBuilder(version);
+
+ if (!libraryAnalyzer.has(FORGE)) return version;
+
+ if (libraryAnalyzer.has(OPTIFINE)) {
+ Library hmclTransformerDiscoveryService = new Library(new Artifact("org.jackhuang.hmcl", "transformer-discovery-service", "1.0"));
+ Optional optiFine = version.getLibraries().stream().filter(library -> library.is("optifine", "OptiFine")).findAny();
+ boolean libraryExisting = version.getLibraries().stream().anyMatch(library -> library.is("org.jackhuang.hmcl", "transformer-discovery-service"));
+ optiFine.ifPresent(library -> {
+ builder.addJvmArgument("-Dhmcl.transformer.candidates=${library_directory}/" + library.getPath());
+ if (!libraryExisting) builder.addLibrary(hmclTransformerDiscoveryService);
+ Path libraryPath = repository.getLibraryFile(version, hmclTransformerDiscoveryService).toPath();
+ try (InputStream input = MaintainTask.class.getResourceAsStream("/assets/game/HMCLTransformerDiscoveryService-1.0.jar")) {
+ Files.createDirectories(libraryPath.getParent());
+ Files.copy(input, libraryPath, StandardCopyOption.REPLACE_EXISTING);
+ } catch (IOException e) {
+ Logging.LOG.log(Level.WARNING, "Unable to unpack HMCLTransformerDiscoveryService", e);
+ }
+ });
+ }
+
+ return builder.build();
+ }
+
+ private static String updateIgnoreList(GameRepository repository, Version version, String ignoreList) {
+ String[] ignores = ignoreList.split(",");
+ List newIgnoreList = new ArrayList<>();
+
+ // To resolve the the problem that name of primary jar may conflict with the module naming convention,
+ // we need to manually ignore ${primary_jar}.
+ newIgnoreList.add("${primary_jar}");
+
+ Path libraryDirectory = repository.getLibrariesDirectory(version).toPath().toAbsolutePath();
+
+ // The default ignoreList is too loose and may cause some problems, we replace them with the absolute version.
+ // For example, if "client-extra" is in ignoreList, and game directory contains "client-extra" component, all
+ // libraries will be ignored, which is not expected.
+ for (String classpathName : repository.getClasspath(version)) {
+ Path classpathFile = Paths.get(classpathName).toAbsolutePath();
+ String fileName = classpathFile.getFileName().toString();
+ if (Stream.of(ignores).anyMatch(fileName::contains)) {
+ // This library should be ignored for Jigsaw module finding by Forge.
+ String absolutePath;
+ if (classpathFile.startsWith(libraryDirectory)) {
+ // Note: It's assumed using "/" instead of File.separator in classpath
+ absolutePath = "${library_directory}${file_separator}" + libraryDirectory.relativize(classpathFile).toString().replace(File.separator, "${file_separator}");
+ } else {
+ absolutePath = classpathFile.toString();
+ }
+ newIgnoreList.add(StringUtils.substringBefore(absolutePath, ","));
+ }
+ }
+ return String.join(",", newIgnoreList);
+ }
+
+ // Fix wrong configurations when launching 1.17+ with Forge.
+ private static Version maintainGameWithCpwBoostrapLauncher(GameRepository repository, Version version) {
+ LibraryAnalyzer libraryAnalyzer = LibraryAnalyzer.analyze(version);
+ VersionLibraryBuilder builder = new VersionLibraryBuilder(version);
+
+ if (!libraryAnalyzer.has(FORGE)) return version;
+
+ Optional bslVersion = libraryAnalyzer.getVersion(BOOTSTRAP_LAUNCHER);
+
+ if (bslVersion.isPresent()) {
+ if (VersionNumber.VERSION_COMPARATOR.compare(bslVersion.get(), "0.1.17") < 0) {
+ // The default ignoreList will be applied to all components of libraries in classpath,
+ // so if game directory located in some directory like /Users/asm, all libraries will be ignored,
+ // which is not expected. We fix this here.
+ List jvm = builder.getMutableJvmArguments();
+ for (int i = 0; i < jvm.size(); i++) {
+ Argument jvmArg = jvm.get(i);
+ if (jvmArg instanceof StringArgument) {
+ String jvmArgStr = jvmArg.toString();
+ if (jvmArgStr.startsWith("-DignoreList=")) {
+ jvm.set(i, new StringArgument("-DignoreList=" + updateIgnoreList(repository, version, jvmArgStr.substring("-DignoreList=".length()))));
+ }
+ }
+ }
+ } else {
+ // bootstraplauncher 0.1.17 will only apply ignoreList to file name of libraries in classpath.
+ // So we only fixes name of primary jar.
+ List jvm = builder.getMutableJvmArguments();
+ for (int i = 0; i < jvm.size(); i++) {
+ Argument jvmArg = jvm.get(i);
+ if (jvmArg instanceof StringArgument) {
+ String jvmArgStr = jvmArg.toString();
+ if (jvmArgStr.startsWith("-DignoreList=")) {
+ jvm.set(i, new StringArgument(jvmArgStr + ",${primary_jar_name}"));
+ }
+ }
+ }
+ }
+ }
+
+ return builder.build();
+ }
+
+ private static Version maintainOptiFineLibrary(GameRepository repository, Version version, boolean remove) {
+ LibraryAnalyzer libraryAnalyzer = LibraryAnalyzer.analyze(version);
+ List libraries = new ArrayList<>(version.getLibraries());
+
+ if (libraryAnalyzer.has(OPTIFINE)) {
+ if (libraryAnalyzer.has(LITELOADER) || libraryAnalyzer.has(FORGE)) {
+ // If forge or LiteLoader installed, OptiFine Forge Tweaker is needed.
+ // And we should load the installer jar instead of patch jar.
+ if (repository != null) {
+ for (int i = 0; i < version.getLibraries().size(); ++i) {
+ Library library = libraries.get(i);
+ if (library.is("optifine", "OptiFine")) {
+ Library newLibrary = new Library(new Artifact("optifine", "OptiFine", library.getVersion(), "installer"));
+ if (repository.getLibraryFile(version, newLibrary).exists()) {
+ libraries.set(i, null);
+ // OptiFine should be loaded after Forge in classpath.
+ // Although we have altered priority of OptiFine higher than Forge,
+ // there still exists a situation that Forge is installed without patch.
+ // Here we manually alter the position of OptiFine library in classpath.
+ if (!remove) libraries.add(newLibrary);
+ }
+ }
+
+ if (library.is("optifine", "launchwrapper-of")) {
+ // With MinecraftForge installed, the custom launchwrapper installed by OptiFine will conflicts
+ // with the one installed by MinecraftForge or LiteLoader or ModLoader.
+ // Simply removing it works.
+ libraries.set(i, null);
+ }
+ }
+ }
+ }
+ }
+
+ return version.setLibraries(libraries.stream().filter(Objects::nonNull).collect(Collectors.toList()));
+ }
+
+ public static boolean isPurePatched(Version version) {
+ if (!version.isResolvedPreservingPatches())
+ throw new IllegalArgumentException("isPurePatched requires a version resolved preserving patches");
+
+ return version.hasPatch("game");
+ }
+
+ public static Version unique(Version version) {
+ List libraries = new ArrayList<>();
+
+ SimpleMultimap multimap = new SimpleMultimap(HashMap::new, ArrayList::new);
+
+ for (Library library : version.getLibraries()) {
+ String id = library.getGroupId() + ":" + library.getArtifactId();
+ VersionNumber number = VersionNumber.asVersion(library.getVersion());
+ String serialized = JsonUtils.GSON.toJson(library);
+
+ if (multimap.containsKey(id)) {
+ boolean duplicate = false;
+ for (int otherLibraryIndex : multimap.get(id)) {
+ Library otherLibrary = libraries.get(otherLibraryIndex);
+ VersionNumber otherNumber = VersionNumber.asVersion(otherLibrary.getVersion());
+ if (CompatibilityRule.equals(library.getRules(), otherLibrary.getRules())) { // rules equal, ignore older version.
+ boolean flag = true;
+ if (number.compareTo(otherNumber) > 0) { // if this library is newer
+ // replace [otherLibrary] with [library]
+ libraries.set(otherLibraryIndex, library);
+ } else if (number.compareTo(otherNumber) == 0) { // same library id.
+ // prevent from duplicated libraries
+ if (library.equals(otherLibrary)) {
+ String otherSerialized = JsonUtils.GSON.toJson(otherLibrary);
+ // A trick, the library that has more information is better, which can be
+ // considered whose serialized JSON text will be longer.
+ if (serialized.length() > otherSerialized.length()) {
+ libraries.set(otherLibraryIndex, library);
+ }
+ } else {
+ // for text2speech, which have same library id as well as version number,
+ // but its library and native library does not equal
+ flag = false;
+ }
+ }
+ if (flag) {
+ duplicate = true;
+ break;
+ }
+ }
+ }
+
+ if (!duplicate) {
+ multimap.put(id, libraries.size());
+ libraries.add(library);
+ }
+ } else {
+ multimap.put(id, libraries.size());
+ libraries.add(library);
+ }
+ }
+
+ return version.setLibraries(libraries);
+ }
+}
diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/download/MojangDownloadProvider.java b/FCLCore/src/main/java/com/tungsten/fclcore/download/MojangDownloadProvider.java
new file mode 100644
index 000000000..3a7870787
--- /dev/null
+++ b/FCLCore/src/main/java/com/tungsten/fclcore/download/MojangDownloadProvider.java
@@ -0,0 +1,81 @@
+package com.tungsten.fclcore.download;
+
+import com.tungsten.fclcore.download.fabric.FabricAPIVersionList;
+import com.tungsten.fclcore.download.fabric.FabricVersionList;
+import com.tungsten.fclcore.download.forge.ForgeBMCLVersionList;
+import com.tungsten.fclcore.download.game.GameVersionList;
+import com.tungsten.fclcore.download.liteloader.LiteLoaderVersionList;
+import com.tungsten.fclcore.download.optifine.OptiFineBMCLVersionList;
+import com.tungsten.fclcore.download.quilt.QuiltAPIVersionList;
+import com.tungsten.fclcore.download.quilt.QuiltVersionList;
+
+/**
+ * @see http://wiki.vg
+ */
+public class MojangDownloadProvider implements DownloadProvider {
+ private final GameVersionList game;
+ private final FabricVersionList fabric;
+ private final FabricAPIVersionList fabricApi;
+ private final ForgeBMCLVersionList forge;
+ private final LiteLoaderVersionList liteLoader;
+ private final OptiFineBMCLVersionList optifine;
+ private final QuiltVersionList quilt;
+ private final QuiltAPIVersionList quiltApi;
+
+ public MojangDownloadProvider() {
+ String apiRoot = "https://bmclapi2.bangbang93.com";
+
+ this.game = new GameVersionList(this);
+ this.fabric = new FabricVersionList(this);
+ this.fabricApi = new FabricAPIVersionList(this);
+ this.forge = new ForgeBMCLVersionList(apiRoot);
+ this.liteLoader = new LiteLoaderVersionList(this);
+ this.optifine = new OptiFineBMCLVersionList(apiRoot);
+ this.quilt = new QuiltVersionList(this);
+ this.quiltApi = new QuiltAPIVersionList(this);
+ }
+
+ @Override
+ public String getVersionListURL() {
+ return "https://piston-meta.mojang.com/mc/game/version_manifest.json";
+ }
+
+ @Override
+ public String getAssetBaseURL() {
+ return "https://resources.download.minecraft.net/";
+ }
+
+ @Override
+ public VersionList> getVersionListById(String id) {
+ switch (id) {
+ case "game":
+ return game;
+ case "fabric":
+ return fabric;
+ case "fabric-api":
+ return fabricApi;
+ case "forge":
+ return forge;
+ case "liteloader":
+ return liteLoader;
+ case "optifine":
+ return optifine;
+ case "quilt":
+ return quilt;
+ case "quilt-api":
+ return quiltApi;
+ default:
+ throw new IllegalArgumentException("Unrecognized version list id: " + id);
+ }
+ }
+
+ @Override
+ public String injectURL(String baseURL) {
+ return baseURL;
+ }
+
+ @Override
+ public int getConcurrency() {
+ return 6;
+ }
+}
diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/download/MultipleSourceVersionList.java b/FCLCore/src/main/java/com/tungsten/fclcore/download/MultipleSourceVersionList.java
new file mode 100644
index 000000000..1c323ec66
--- /dev/null
+++ b/FCLCore/src/main/java/com/tungsten/fclcore/download/MultipleSourceVersionList.java
@@ -0,0 +1,49 @@
+package com.tungsten.fclcore.download;
+
+import java.util.List;
+import java.util.concurrent.CompletableFuture;
+
+public class MultipleSourceVersionList extends VersionList {
+
+ private final List> backends;
+
+ MultipleSourceVersionList(List> backends) {
+ this.backends = backends;
+
+ assert (backends.size() >= 1);
+ }
+
+ @Override
+ public boolean hasType() {
+ boolean hasType = backends.get(0).hasType();
+ assert (backends.stream().allMatch(versionList -> versionList.hasType() == hasType));
+ return hasType;
+ }
+
+ @Override
+ public CompletableFuture> loadAsync() {
+ throw new UnsupportedOperationException("MultipleSourceVersionList does not support loading the entire remote version list.");
+ }
+
+ @Override
+ public CompletableFuture> refreshAsync() {
+ throw new UnsupportedOperationException("MultipleSourceVersionList does not support loading the entire remote version list.");
+ }
+
+ @Override
+ public CompletableFuture> refreshAsync(String gameVersion) {
+ versions.clear(gameVersion);
+ return CompletableFuture.anyOf(backends.stream()
+ .map(versionList -> versionList.refreshAsync(gameVersion)
+ .thenRunAsync(() -> {
+ lock.writeLock().lock();
+
+ try {
+ versions.putAll(gameVersion, versionList.getVersions(gameVersion));
+ } finally {
+ lock.writeLock().unlock();
+ }
+ }))
+ .toArray(CompletableFuture[]::new));
+ }
+}
diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/download/RemoteVersion.java b/FCLCore/src/main/java/com/tungsten/fclcore/download/RemoteVersion.java
new file mode 100644
index 000000000..4b5010635
--- /dev/null
+++ b/FCLCore/src/main/java/com/tungsten/fclcore/download/RemoteVersion.java
@@ -0,0 +1,113 @@
+package com.tungsten.fclcore.download;
+
+import com.tungsten.fclcore.game.Version;
+import com.tungsten.fclcore.task.Task;
+import com.tungsten.fclcore.util.ToStringBuilder;
+import com.tungsten.fclcore.util.versioning.VersionNumber;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * The remote version.
+ */
+public class RemoteVersion implements Comparable {
+
+ private final String libraryId;
+ private final String gameVersion;
+ private final String selfVersion;
+ private final Date releaseDate;
+ private final List urls;
+ private final Type type;
+
+ /**
+ * Constructor.
+ *
+ * @param gameVersion the Minecraft version that this remote version suits.
+ * @param selfVersion the version string of the remote version.
+ * @param urls the installer or universal jar original URL.
+ */
+ public RemoteVersion(String libraryId, String gameVersion, String selfVersion, Date releaseDate, List urls) {
+ this(libraryId, gameVersion, selfVersion, releaseDate, Type.UNCATEGORIZED, urls);
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param gameVersion the Minecraft version that this remote version suits.
+ * @param selfVersion the version string of the remote version.
+ * @param urls the installer or universal jar URL.
+ */
+ public RemoteVersion(String libraryId, String gameVersion, String selfVersion, Date releaseDate, Type type, List urls) {
+ this.libraryId = Objects.requireNonNull(libraryId);
+ this.gameVersion = Objects.requireNonNull(gameVersion);
+ this.selfVersion = Objects.requireNonNull(selfVersion);
+ this.releaseDate = releaseDate;
+ this.urls = Objects.requireNonNull(urls);
+ this.type = Objects.requireNonNull(type);
+ }
+
+ public String getLibraryId() {
+ return libraryId;
+ }
+
+ public String getGameVersion() {
+ return gameVersion;
+ }
+
+ public String getSelfVersion() {
+ return selfVersion;
+ }
+
+ public String getFullVersion() {
+ return getSelfVersion();
+ }
+
+ public Date getReleaseDate() {
+ return releaseDate;
+ }
+
+ public List getUrls() {
+ return urls;
+ }
+
+ public Type getVersionType() {
+ return type;
+ }
+
+ public Task getInstallTask(DefaultDependencyManager dependencyManager, Version baseVersion) {
+ throw new UnsupportedOperationException(this + " cannot be installed yet");
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ return obj instanceof RemoteVersion && Objects.equals(selfVersion, ((RemoteVersion) obj).selfVersion);
+ }
+
+ @Override
+ public int hashCode() {
+ return selfVersion.hashCode();
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this)
+ .append("selfVersion", selfVersion)
+ .append("gameVersion", gameVersion)
+ .toString();
+ }
+
+ @Override
+ public int compareTo(RemoteVersion o) {
+ // newer versions are smaller than older versions
+ return VersionNumber.asVersion(o.selfVersion).compareTo(VersionNumber.asVersion(selfVersion));
+ }
+
+ public enum Type {
+ UNCATEGORIZED,
+ RELEASE,
+ SNAPSHOT,
+ OLD
+ }
+}
diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/download/UnsupportedInstallationException.java b/FCLCore/src/main/java/com/tungsten/fclcore/download/UnsupportedInstallationException.java
new file mode 100644
index 000000000..a4649639d
--- /dev/null
+++ b/FCLCore/src/main/java/com/tungsten/fclcore/download/UnsupportedInstallationException.java
@@ -0,0 +1,22 @@
+package com.tungsten.fclcore.download;
+
+public class UnsupportedInstallationException extends Exception {
+
+ private final int reason;
+
+ public UnsupportedInstallationException(int reason) {
+ this.reason = reason;
+ }
+
+ public int getReason() {
+ return reason;
+ }
+
+ // e.g. Forge is not compatible with fabric.
+ public static final int UNSUPPORTED_LAUNCH_WRAPPER = 1;
+
+ // 1.17: OptiFine>=H1 Pre2 is compatible with Forge.
+ public static final int FORGE_1_17_OPTIFINE_H1_PRE2 = 2;
+
+ public static final int FABRIC_NOT_COMPATIBLE_WITH_FORGE = 3;
+}
diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/download/VersionList.java b/FCLCore/src/main/java/com/tungsten/fclcore/download/VersionList.java
new file mode 100644
index 000000000..62155f0e3
--- /dev/null
+++ b/FCLCore/src/main/java/com/tungsten/fclcore/download/VersionList.java
@@ -0,0 +1,123 @@
+package com.tungsten.fclcore.download;
+
+import com.tungsten.fclcore.util.SimpleMultimap;
+
+import java.util.*;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+
+/**
+ * The remote version list.
+ *
+ * @param The subclass of {@code RemoteVersion}, the type of RemoteVersion.
+ */
+public abstract class VersionList {
+
+ /**
+ * the remote version list.
+ * key: game version.
+ * values: corresponding remote versions.
+ */
+ protected final SimpleMultimap versions = new SimpleMultimap(HashMap::new, TreeSet::new);
+
+ /**
+ * True if the version list has been loaded.
+ */
+ public boolean isLoaded() {
+ return !versions.isEmpty();
+ }
+
+ /**
+ * True if the version list that contains the remote versions which depends on the specific game version has been loaded.
+ * @param gameVersion the remote version depends on
+ */
+ public boolean isLoaded(String gameVersion) {
+ return !versions.get(gameVersion).isEmpty();
+ }
+
+ public abstract boolean hasType();
+
+ protected final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
+
+ /**
+ * @return the task to reload the remote version list.
+ */
+ public abstract CompletableFuture> refreshAsync();
+
+ /**
+ * @param gameVersion the remote version depends on
+ * @return the task to reload the remote version list.
+ */
+ public CompletableFuture> refreshAsync(String gameVersion) {
+ return refreshAsync();
+ }
+
+ public CompletableFuture> loadAsync() {
+ return CompletableFuture.completedFuture(null)
+ .thenComposeAsync(unused -> {
+ lock.readLock().lock();
+ boolean loaded;
+
+ try {
+ loaded = isLoaded();
+ } finally {
+ lock.readLock().unlock();
+ }
+ return loaded ? CompletableFuture.completedFuture(null) : refreshAsync();
+ });
+ }
+
+ public CompletableFuture> loadAsync(String gameVersion) {
+ return CompletableFuture.completedFuture(null)
+ .thenComposeAsync(unused -> {
+ lock.readLock().lock();
+ boolean loaded;
+
+ try {
+ loaded = isLoaded(gameVersion);
+ } finally {
+ lock.readLock().unlock();
+ }
+ return loaded ? CompletableFuture.completedFuture(null) : refreshAsync(gameVersion);
+ });
+ }
+
+ protected Collection getVersionsImpl(String gameVersion) {
+ return versions.get(gameVersion);
+ }
+
+ /**
+ * Get the remote versions that specifics Minecraft version.
+ *
+ * @param gameVersion the Minecraft version that remote versions belong to
+ * @return the collection of specific remote versions
+ */
+ public final Collection getVersions(String gameVersion) {
+ lock.readLock().lock();
+ try {
+ return Collections.unmodifiableCollection(new ArrayList<>(getVersionsImpl(gameVersion)));
+ } finally {
+ lock.readLock().unlock();
+ }
+ }
+
+ /**
+ * Get the specific remote version.
+ *
+ * @param gameVersion the Minecraft version that remote versions belong to
+ * @param remoteVersion the version of the remote version.
+ * @return the specific remote version, null if it is not found.
+ */
+ public Optional getVersion(String gameVersion, String remoteVersion) {
+ lock.readLock().lock();
+ try {
+ T result = null;
+ for (T it : versions.get(gameVersion))
+ if (remoteVersion.equals(it.getSelfVersion()))
+ result = it;
+ return Optional.ofNullable(result);
+ } finally {
+ lock.readLock().unlock();
+ }
+ }
+}
diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/download/VersionMismatchException.java b/FCLCore/src/main/java/com/tungsten/fclcore/download/VersionMismatchException.java
new file mode 100644
index 000000000..6ac9de2f7
--- /dev/null
+++ b/FCLCore/src/main/java/com/tungsten/fclcore/download/VersionMismatchException.java
@@ -0,0 +1,20 @@
+package com.tungsten.fclcore.download;
+
+public class VersionMismatchException extends Exception {
+
+ private final String expect, actual;
+
+ public VersionMismatchException(String expect, String actual) {
+ super("Mismatched game version requirement, library requires game to be " + expect + ", but actual is " + actual);
+ this.expect = expect;
+ this.actual = actual;
+ }
+
+ public String getExpect() {
+ return expect;
+ }
+
+ public String getActual() {
+ return actual;
+ }
+}
diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/download/fabric/FabricAPIInstallTask.java b/FCLCore/src/main/java/com/tungsten/fclcore/download/fabric/FabricAPIInstallTask.java
new file mode 100644
index 000000000..8e69c367e
--- /dev/null
+++ b/FCLCore/src/main/java/com/tungsten/fclcore/download/fabric/FabricAPIInstallTask.java
@@ -0,0 +1,48 @@
+package com.tungsten.fclcore.download.fabric;
+
+import com.tungsten.fclcore.download.DefaultDependencyManager;
+import com.tungsten.fclcore.game.Version;
+import com.tungsten.fclcore.task.FileDownloadTask;
+import com.tungsten.fclcore.task.Task;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * Note: Fabric should be installed first.
+ */
+public final class FabricAPIInstallTask extends Task {
+
+ private final DefaultDependencyManager dependencyManager;
+ private final Version version;
+ private final FabricAPIRemoteVersion remote;
+ private final List> dependencies = new ArrayList<>(1);
+
+ public FabricAPIInstallTask(DefaultDependencyManager dependencyManager, Version version, FabricAPIRemoteVersion remoteVersion) {
+ this.dependencyManager = dependencyManager;
+ this.version = version;
+ this.remote = remoteVersion;
+ }
+
+ @Override
+ public Collection> getDependencies() {
+ return dependencies;
+ }
+
+ @Override
+ public boolean isRelyingOnDependencies() {
+ return false;
+ }
+
+ @Override
+ public void execute() throws IOException {
+ dependencies.add(new FileDownloadTask(
+ new URL(remote.getVersion().getFile().getUrl()),
+ dependencyManager.getGameRepository().getRunDirectory(version.getId()).toPath().resolve("mods").resolve("fabric-api-" + remote.getVersion().getVersion() + ".jar").toFile(),
+ remote.getVersion().getFile().getIntegrityCheck())
+ );
+ }
+}
diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/download/fabric/FabricAPIRemoteVersion.java b/FCLCore/src/main/java/com/tungsten/fclcore/download/fabric/FabricAPIRemoteVersion.java
new file mode 100644
index 000000000..18a3758dd
--- /dev/null
+++ b/FCLCore/src/main/java/com/tungsten/fclcore/download/fabric/FabricAPIRemoteVersion.java
@@ -0,0 +1,50 @@
+package com.tungsten.fclcore.download.fabric;
+
+import com.tungsten.fclcore.download.DefaultDependencyManager;
+import com.tungsten.fclcore.download.LibraryAnalyzer;
+import com.tungsten.fclcore.download.RemoteVersion;
+import com.tungsten.fclcore.game.Version;
+import com.tungsten.fclcore.mod.RemoteMod;
+import com.tungsten.fclcore.task.Task;
+
+import java.util.Date;
+import java.util.List;
+
+public class FabricAPIRemoteVersion extends RemoteVersion {
+ private final String fullVersion;
+ private final RemoteMod.Version version;
+
+ /**
+ * Constructor.
+ *
+ * @param gameVersion the Minecraft version that this remote version suits.
+ * @param selfVersion the version string of the remote version.
+ * @param urls the installer or universal jar original URL.
+ */
+ FabricAPIRemoteVersion(String gameVersion, String selfVersion, String fullVersion, Date datePublished, RemoteMod.Version version, List urls) {
+ super(LibraryAnalyzer.LibraryType.FABRIC_API.getPatchId(), gameVersion, selfVersion, datePublished, urls);
+
+ this.fullVersion = fullVersion;
+ this.version = version;
+ }
+
+ @Override
+ public String getFullVersion() {
+ return fullVersion;
+ }
+
+ public RemoteMod.Version getVersion() {
+ return version;
+ }
+
+ @Override
+ public Task getInstallTask(DefaultDependencyManager dependencyManager, Version baseVersion) {
+ return new FabricAPIInstallTask(dependencyManager, baseVersion, this);
+ }
+
+ @Override
+ public int compareTo(RemoteVersion o) {
+ if (!(o instanceof FabricAPIRemoteVersion)) return 0;
+ return -this.getReleaseDate().compareTo(o.getReleaseDate());
+ }
+}
diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/download/fabric/FabricAPIVersionList.java b/FCLCore/src/main/java/com/tungsten/fclcore/download/fabric/FabricAPIVersionList.java
new file mode 100644
index 000000000..d9c2707bb
--- /dev/null
+++ b/FCLCore/src/main/java/com/tungsten/fclcore/download/fabric/FabricAPIVersionList.java
@@ -0,0 +1,36 @@
+package com.tungsten.fclcore.download.fabric;
+
+import com.tungsten.fclcore.download.DownloadProvider;
+import com.tungsten.fclcore.download.VersionList;
+import com.tungsten.fclcore.mod.RemoteMod;
+import com.tungsten.fclcore.mod.modrinth.ModrinthRemoteModRepository;
+import com.tungsten.fclcore.util.Lang;
+
+import java.util.Collections;
+import java.util.concurrent.CompletableFuture;
+
+public class FabricAPIVersionList extends VersionList {
+
+ private final DownloadProvider downloadProvider;
+
+ public FabricAPIVersionList(DownloadProvider downloadProvider) {
+ this.downloadProvider = downloadProvider;
+ }
+
+ @Override
+ public boolean hasType() {
+ return false;
+ }
+
+ @Override
+ public CompletableFuture> refreshAsync() {
+ return CompletableFuture.runAsync(wrap(() -> {
+ for (RemoteMod.Version modVersion : Lang.toIterable(ModrinthRemoteModRepository.MODS.getRemoteVersionsById("P7dR8mSH"))) {
+ for (String gameVersion : modVersion.getGameVersions()) {
+ versions.put(gameVersion, new FabricAPIRemoteVersion(gameVersion, modVersion.getVersion(), modVersion.getName(), modVersion.getDatePublished(), modVersion,
+ Collections.singletonList(modVersion.getFile().getUrl())));
+ }
+ }
+ }));
+ }
+}
diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/download/fabric/FabricInstallTask.java b/FCLCore/src/main/java/com/tungsten/fclcore/download/fabric/FabricInstallTask.java
new file mode 100644
index 000000000..d7c1314a4
--- /dev/null
+++ b/FCLCore/src/main/java/com/tungsten/fclcore/download/fabric/FabricInstallTask.java
@@ -0,0 +1,189 @@
+package com.tungsten.fclcore.download.fabric;
+
+import static com.tungsten.fclcore.download.UnsupportedInstallationException.FABRIC_NOT_COMPATIBLE_WITH_FORGE;
+
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.tungsten.fclcore.download.DefaultDependencyManager;
+import com.tungsten.fclcore.download.LibraryAnalyzer;
+import com.tungsten.fclcore.download.UnsupportedInstallationException;
+import com.tungsten.fclcore.game.Arguments;
+import com.tungsten.fclcore.game.Artifact;
+import com.tungsten.fclcore.game.Library;
+import com.tungsten.fclcore.game.Version;
+import com.tungsten.fclcore.task.GetTask;
+import com.tungsten.fclcore.task.Task;
+import com.tungsten.fclcore.util.gson.JsonUtils;
+
+import java.util.*;
+
+/**
+ * Note: Fabric should be installed first.
+ */
+public final class FabricInstallTask extends Task {
+
+ private final DefaultDependencyManager dependencyManager;
+ private final Version version;
+ private final FabricRemoteVersion remote;
+ private final GetTask launchMetaTask;
+ private final List> dependencies = new ArrayList<>(1);
+
+ public FabricInstallTask(DefaultDependencyManager dependencyManager, Version version, FabricRemoteVersion remoteVersion) {
+ this.dependencyManager = dependencyManager;
+ this.version = version;
+ this.remote = remoteVersion;
+
+ launchMetaTask = new GetTask(dependencyManager.getDownloadProvider().injectURLsWithCandidates(remoteVersion.getUrls()));
+ launchMetaTask.setCacheRepository(dependencyManager.getCacheRepository());
+ }
+
+ @Override
+ public boolean doPreExecute() {
+ return true;
+ }
+
+ @Override
+ public void preExecute() throws Exception {
+ if (!Objects.equals("net.minecraft.client.main.Main", version.resolve(dependencyManager.getGameRepository()).getMainClass()))
+ throw new UnsupportedInstallationException(FABRIC_NOT_COMPATIBLE_WITH_FORGE);
+ }
+
+ @Override
+ public Collection> getDependents() {
+ return Collections.singleton(launchMetaTask);
+ }
+
+ @Override
+ public Collection> getDependencies() {
+ return dependencies;
+ }
+
+ @Override
+ public boolean isRelyingOnDependencies() {
+ return false;
+ }
+
+ @Override
+ public void execute() {
+ setResult(getPatch(JsonUtils.GSON.fromJson(launchMetaTask.getResult(), FabricInfo.class), remote.getGameVersion(), remote.getSelfVersion()));
+
+ dependencies.add(dependencyManager.checkLibraryCompletionAsync(getResult(), true));
+ }
+
+ private Version getPatch(FabricInfo fabricInfo, String gameVersion, String loaderVersion) {
+ JsonObject launcherMeta = fabricInfo.launcherMeta;
+ Arguments arguments = new Arguments();
+
+ String mainClass;
+ if (!launcherMeta.get("mainClass").isJsonObject()) {
+ mainClass = launcherMeta.get("mainClass").getAsString();
+ } else {
+ mainClass = launcherMeta.get("mainClass").getAsJsonObject().get("client").getAsString();
+ }
+
+ if (launcherMeta.has("launchwrapper")) {
+ String clientTweaker = launcherMeta.get("launchwrapper").getAsJsonObject().get("tweakers").getAsJsonObject().get("client").getAsJsonArray().get(0).getAsString();
+ arguments = arguments.addGameArguments("--tweakClass", clientTweaker);
+ }
+
+ JsonObject librariesObject = launcherMeta.getAsJsonObject("libraries");
+ List libraries = new ArrayList<>();
+
+ // "common, server" is hard coded in fabric installer.
+ // Don't know the purpose of ignoring client libraries.
+ for (String side : new String[]{"common", "server"}) {
+ for (JsonElement element : librariesObject.getAsJsonArray(side)) {
+ libraries.add(JsonUtils.GSON.fromJson(element, Library.class));
+ }
+ }
+
+ libraries.add(new Library(Artifact.fromDescriptor(fabricInfo.intermediary.maven), "https://maven.fabricmc.net/", null));
+ libraries.add(new Library(Artifact.fromDescriptor(fabricInfo.loader.maven), "https://maven.fabricmc.net/", null));
+
+ return new Version(LibraryAnalyzer.LibraryType.FABRIC.getPatchId(), loaderVersion, 30000, arguments, mainClass, libraries);
+ }
+
+ public static class FabricInfo {
+ private final LoaderInfo loader;
+ private final IntermediaryInfo intermediary;
+ private final JsonObject launcherMeta;
+
+ public FabricInfo(LoaderInfo loader, IntermediaryInfo intermediary, JsonObject launcherMeta) {
+ this.loader = loader;
+ this.intermediary = intermediary;
+ this.launcherMeta = launcherMeta;
+ }
+
+ public LoaderInfo getLoader() {
+ return loader;
+ }
+
+ public IntermediaryInfo getIntermediary() {
+ return intermediary;
+ }
+
+ public JsonObject getLauncherMeta() {
+ return launcherMeta;
+ }
+ }
+
+ public static class LoaderInfo {
+ private final String separator;
+ private final int build;
+ private final String maven;
+ private final String version;
+ private final boolean stable;
+
+ public LoaderInfo(String separator, int build, String maven, String version, boolean stable) {
+ this.separator = separator;
+ this.build = build;
+ this.maven = maven;
+ this.version = version;
+ this.stable = stable;
+ }
+
+ public String getSeparator() {
+ return separator;
+ }
+
+ public int getBuild() {
+ return build;
+ }
+
+ public String getMaven() {
+ return maven;
+ }
+
+ public String getVersion() {
+ return version;
+ }
+
+ public boolean isStable() {
+ return stable;
+ }
+ }
+
+ public static class IntermediaryInfo {
+ private final String maven;
+ private final String version;
+ private final boolean stable;
+
+ public IntermediaryInfo(String maven, String version, boolean stable) {
+ this.maven = maven;
+ this.version = version;
+ this.stable = stable;
+ }
+
+ public String getMaven() {
+ return maven;
+ }
+
+ public String getVersion() {
+ return version;
+ }
+
+ public boolean isStable() {
+ return stable;
+ }
+ }
+}
diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/download/fabric/FabricRemoteVersion.java b/FCLCore/src/main/java/com/tungsten/fclcore/download/fabric/FabricRemoteVersion.java
new file mode 100644
index 000000000..a5019b705
--- /dev/null
+++ b/FCLCore/src/main/java/com/tungsten/fclcore/download/fabric/FabricRemoteVersion.java
@@ -0,0 +1,27 @@
+package com.tungsten.fclcore.download.fabric;
+
+import com.tungsten.fclcore.download.DefaultDependencyManager;
+import com.tungsten.fclcore.download.LibraryAnalyzer;
+import com.tungsten.fclcore.download.RemoteVersion;
+import com.tungsten.fclcore.game.Version;
+import com.tungsten.fclcore.task.Task;
+
+import java.util.List;
+
+public class FabricRemoteVersion extends RemoteVersion {
+ /**
+ * Constructor.
+ *
+ * @param gameVersion the Minecraft version that this remote version suits.
+ * @param selfVersion the version string of the remote version.
+ * @param urls the installer or universal jar original URL.
+ */
+ FabricRemoteVersion(String gameVersion, String selfVersion, List urls) {
+ super(LibraryAnalyzer.LibraryType.FABRIC.getPatchId(), gameVersion, selfVersion, null, urls);
+ }
+
+ @Override
+ public Task getInstallTask(DefaultDependencyManager dependencyManager, Version baseVersion) {
+ return new FabricInstallTask(dependencyManager, baseVersion, this);
+ }
+}
diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/download/fabric/FabricVersionList.java b/FCLCore/src/main/java/com/tungsten/fclcore/download/fabric/FabricVersionList.java
new file mode 100644
index 000000000..5abaac76b
--- /dev/null
+++ b/FCLCore/src/main/java/com/tungsten/fclcore/download/fabric/FabricVersionList.java
@@ -0,0 +1,90 @@
+package com.tungsten.fclcore.download.fabric;
+
+import com.google.gson.reflect.TypeToken;
+import com.tungsten.fclcore.download.DownloadProvider;
+import com.tungsten.fclcore.download.VersionList;
+import com.tungsten.fclcore.util.gson.JsonUtils;
+import com.tungsten.fclcore.util.io.NetworkUtils;
+
+import org.jetbrains.annotations.Nullable;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.concurrent.CompletableFuture;
+import java.util.stream.Collectors;
+
+public final class FabricVersionList extends VersionList {
+ private final DownloadProvider downloadProvider;
+
+ public FabricVersionList(DownloadProvider downloadProvider) {
+ this.downloadProvider = downloadProvider;
+ }
+
+ @Override
+ public boolean hasType() {
+ return false;
+ }
+
+ @Override
+ public CompletableFuture> refreshAsync() {
+ return CompletableFuture.runAsync(wrap(() -> {
+ List gameVersions = getGameVersions(GAME_META_URL);
+ List loaderVersions = getGameVersions(LOADER_META_URL);
+
+ lock.writeLock().lock();
+
+ try {
+ for (String gameVersion : gameVersions)
+ for (String loaderVersion : loaderVersions)
+ versions.put(gameVersion, new FabricRemoteVersion(gameVersion, loaderVersion,
+ Collections.singletonList(getLaunchMetaUrl(gameVersion, loaderVersion))));
+ } finally {
+ lock.writeLock().unlock();
+ }
+ }));
+ }
+
+ private static final String LOADER_META_URL = "https://meta.fabricmc.net/v2/versions/loader";
+ private static final String GAME_META_URL = "https://meta.fabricmc.net/v2/versions/game";
+
+ private List getGameVersions(String metaUrl) throws IOException {
+ String json = NetworkUtils.doGet(NetworkUtils.toURL(downloadProvider.injectURL(metaUrl)));
+ return JsonUtils.GSON.>fromJson(json, new TypeToken>() {
+ }.getType()).stream().map(GameVersion::getVersion).collect(Collectors.toList());
+ }
+
+ private static String getLaunchMetaUrl(String gameVersion, String loaderVersion) {
+ return String.format("https://meta.fabricmc.net/v2/versions/loader/%s/%s", gameVersion, loaderVersion);
+ }
+
+ private static class GameVersion {
+ private final String version;
+ private final String maven;
+ private final boolean stable;
+
+ public GameVersion() {
+ this("", null, false);
+ }
+
+ public GameVersion(String version, String maven, boolean stable) {
+ this.version = version;
+ this.maven = maven;
+ this.stable = stable;
+ }
+
+ public String getVersion() {
+ return version;
+ }
+
+ @Nullable
+ public String getMaven() {
+ return maven;
+ }
+
+ public boolean isStable() {
+ return stable;
+ }
+ }
+}
diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/download/forge/ForgeBMCLVersionList.java b/FCLCore/src/main/java/com/tungsten/fclcore/download/forge/ForgeBMCLVersionList.java
new file mode 100644
index 000000000..3632ed26b
--- /dev/null
+++ b/FCLCore/src/main/java/com/tungsten/fclcore/download/forge/ForgeBMCLVersionList.java
@@ -0,0 +1,201 @@
+package com.tungsten.fclcore.download.forge;
+
+import static com.tungsten.fclcore.util.Logging.LOG;
+import static com.tungsten.fclcore.util.Pair.pair;
+
+import com.google.gson.JsonParseException;
+import com.google.gson.reflect.TypeToken;
+import com.tungsten.fclcore.download.VersionList;
+import com.tungsten.fclcore.util.StringUtils;
+import com.tungsten.fclcore.util.gson.Validation;
+import com.tungsten.fclcore.util.io.HttpRequest;
+import com.tungsten.fclcore.util.io.NetworkUtils;
+
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.time.Instant;
+import java.time.format.DateTimeParseException;
+import java.util.*;
+import java.util.concurrent.CompletableFuture;
+import java.util.logging.Level;
+
+public final class ForgeBMCLVersionList extends VersionList {
+ private final String apiRoot;
+
+ /**
+ * @param apiRoot API Root of BMCLAPI implementations
+ */
+ public ForgeBMCLVersionList(String apiRoot) {
+ this.apiRoot = apiRoot;
+ }
+
+ @Override
+ public boolean hasType() {
+ return false;
+ }
+
+ @Override
+ public CompletableFuture> loadAsync() {
+ throw new UnsupportedOperationException("ForgeBMCLVersionList does not support loading the entire Forge remote version list.");
+ }
+
+ @Override
+ public CompletableFuture> refreshAsync() {
+ throw new UnsupportedOperationException("ForgeBMCLVersionList does not support loading the entire Forge remote version list.");
+ }
+
+ @Override
+ public CompletableFuture> refreshAsync(String gameVersion) {
+ return CompletableFuture.completedFuture(null)
+ .thenApplyAsync(wrap(unused -> HttpRequest.GET(apiRoot + "/forge/minecraft/" + gameVersion).>getJson(new TypeToken>() {
+ }.getType())))
+ .thenAcceptAsync(forgeVersions -> {
+ lock.writeLock().lock();
+
+ try {
+ versions.clear(gameVersion);
+ if (forgeVersions == null) return;
+ for (ForgeVersion version : forgeVersions) {
+ if (version == null)
+ continue;
+ List urls = new ArrayList<>();
+ for (ForgeVersion.File file : version.getFiles())
+ if ("installer".equals(file.getCategory()) && "jar".equals(file.getFormat())) {
+ String classifier = gameVersion + "-" + version.getVersion()
+ + (StringUtils.isNotBlank(version.getBranch()) ? "-" + version.getBranch() : "");
+ String fileName1 = "forge-" + classifier + "-" + file.getCategory() + "." + file.getFormat();
+ String fileName2 = "forge-" + classifier + "-" + gameVersion + "-" + file.getCategory() + "." + file.getFormat();
+ urls.add("https://files.minecraftforge.net/maven/net/minecraftforge/forge/" + classifier + "/" + fileName1);
+ urls.add("https://files.minecraftforge.net/maven/net/minecraftforge/forge/" + classifier + "-" + gameVersion + "/" + fileName2);
+ urls.add(NetworkUtils.withQuery("https://bmclapi2.bangbang93.com/forge/download", mapOf(
+ pair("mcversion", version.getGameVersion()),
+ pair("version", version.getVersion()),
+ pair("branch", version.getBranch()),
+ pair("category", file.getCategory()),
+ pair("format", file.getFormat())
+ )));
+ }
+
+ if (urls.isEmpty())
+ continue;
+
+ Instant releaseDate = null;
+ if (version.getModified() != null) {
+ try {
+ releaseDate = Instant.parse(version.getModified());
+ } catch (DateTimeParseException e) {
+ LOG.log(Level.WARNING, "Failed to parse instant " + version.getModified(), e);
+ }
+ }
+
+ versions.put(gameVersion, new ForgeRemoteVersion(
+ version.getGameVersion(), version.getVersion(), releaseDate == null ? null : Date.from(releaseDate), urls));
+ }
+ } finally {
+ lock.writeLock().unlock();
+ }
+ });
+ }
+
+ @Override
+ public Optional getVersion(String gameVersion, String remoteVersion) {
+ remoteVersion = StringUtils.substringAfter(remoteVersion, "-", remoteVersion);
+ return super.getVersion(gameVersion, remoteVersion);
+ }
+
+ public static final class ForgeVersion implements Validation {
+
+ private final String branch;
+ private final int build;
+ private final String mcversion;
+ private final String modified;
+ private final String version;
+ private final List files;
+
+ /**
+ * No-arg constructor for Gson.
+ */
+ @SuppressWarnings("unused")
+ public ForgeVersion() {
+ this(null, 0, "", null, "", Collections.emptyList());
+ }
+
+ public ForgeVersion(String branch, int build, String mcversion, String modified, String version, List files) {
+ this.branch = branch;
+ this.build = build;
+ this.mcversion = mcversion;
+ this.modified = modified;
+ this.version = version;
+ this.files = files;
+ }
+
+ @Nullable
+ public String getBranch() {
+ return branch;
+ }
+
+ public int getBuild() {
+ return build;
+ }
+
+ @NotNull
+ public String getGameVersion() {
+ return mcversion;
+ }
+
+ @Nullable
+ public String getModified() {
+ return modified;
+ }
+
+ @NotNull
+ public String getVersion() {
+ return version;
+ }
+
+ @NotNull
+ public List getFiles() {
+ return files;
+ }
+
+ @Override
+ public void validate() throws JsonParseException {
+ if (files == null)
+ throw new JsonParseException("ForgeVersion files cannot be null");
+ if (version == null)
+ throw new JsonParseException("ForgeVersion version cannot be null");
+ if (mcversion == null)
+ throw new JsonParseException("ForgeVersion mcversion cannot be null");
+ }
+
+ @Immutable
+ public static final class File {
+ private final String format;
+ private final String category;
+ private final String hash;
+
+ public File() {
+ this("", "", "");
+ }
+
+ public File(String format, String category, String hash) {
+ this.format = format;
+ this.category = category;
+ this.hash = hash;
+ }
+
+ public String getFormat() {
+ return format;
+ }
+
+ public String getCategory() {
+ return category;
+ }
+
+ public String getHash() {
+ return hash;
+ }
+ }
+ }
+}
diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/download/forge/ForgeInstall.java b/FCLCore/src/main/java/com/tungsten/fclcore/download/forge/ForgeInstall.java
new file mode 100644
index 000000000..895b91bc9
--- /dev/null
+++ b/FCLCore/src/main/java/com/tungsten/fclcore/download/forge/ForgeInstall.java
@@ -0,0 +1,69 @@
+package com.tungsten.fclcore.download.forge;
+
+import com.tungsten.fclcore.game.Artifact;
+
+public final class ForgeInstall {
+
+ private final String profileName;
+ private final String target;
+ private final Artifact path;
+ private final String version;
+ private final String filePath;
+ private final String welcome;
+ private final String minecraft;
+ private final String mirrorList;
+ private final String logo;
+
+ public ForgeInstall() {
+ this(null, null, null, null, null, null, null, null, null);
+ }
+
+ public ForgeInstall(String profileName, String target, Artifact path, String version, String filePath, String welcome, String minecraft, String mirrorList, String logo) {
+ this.profileName = profileName;
+ this.target = target;
+ this.path = path;
+ this.version = version;
+ this.filePath = filePath;
+ this.welcome = welcome;
+ this.minecraft = minecraft;
+ this.mirrorList = mirrorList;
+ this.logo = logo;
+ }
+
+ public String getProfileName() {
+ return profileName;
+ }
+
+ public String getTarget() {
+ return target;
+ }
+
+ public Artifact getPath() {
+ return path;
+ }
+
+ public String getVersion() {
+ return version;
+ }
+
+ public String getFilePath() {
+ return filePath;
+ }
+
+ public String getWelcome() {
+ return welcome;
+ }
+
+ public String getMinecraft() {
+ return minecraft;
+ }
+
+ public String getMirrorList() {
+ return mirrorList;
+ }
+
+ public String getLogo() {
+ return logo;
+ }
+
+}
diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/download/forge/ForgeInstallProfile.java b/FCLCore/src/main/java/com/tungsten/fclcore/download/forge/ForgeInstallProfile.java
new file mode 100644
index 000000000..3ce872960
--- /dev/null
+++ b/FCLCore/src/main/java/com/tungsten/fclcore/download/forge/ForgeInstallProfile.java
@@ -0,0 +1,37 @@
+package com.tungsten.fclcore.download.forge;
+
+import com.google.gson.JsonParseException;
+import com.google.gson.annotations.SerializedName;
+import com.tungsten.fclcore.game.Version;
+import com.tungsten.fclcore.util.gson.Validation;
+
+public final class ForgeInstallProfile implements Validation {
+
+ @SerializedName("install")
+ private final ForgeInstall install;
+
+ @SerializedName("versionInfo")
+ private final Version versionInfo;
+
+ public ForgeInstallProfile(ForgeInstall install, Version versionInfo) {
+ this.install = install;
+ this.versionInfo = versionInfo;
+ }
+
+ public ForgeInstall getInstall() {
+ return install;
+ }
+
+ public Version getVersionInfo() {
+ return versionInfo;
+ }
+
+ @Override
+ public void validate() throws JsonParseException {
+ if (install == null)
+ throw new JsonParseException("InstallProfile install cannot be null");
+
+ if (versionInfo == null)
+ throw new JsonParseException("InstallProfile versionInfo cannot be null");
+ }
+}
diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/download/forge/ForgeInstallTask.java b/FCLCore/src/main/java/com/tungsten/fclcore/download/forge/ForgeInstallTask.java
new file mode 100644
index 000000000..fd766f1be
--- /dev/null
+++ b/FCLCore/src/main/java/com/tungsten/fclcore/download/forge/ForgeInstallTask.java
@@ -0,0 +1,173 @@
+package com.tungsten.fclcore.download.forge;
+
+import static com.tungsten.fclcore.download.UnsupportedInstallationException.UNSUPPORTED_LAUNCH_WRAPPER;
+import static com.tungsten.fclcore.util.StringUtils.removePrefix;
+import static com.tungsten.fclcore.util.StringUtils.removeSuffix;
+
+import com.tungsten.fclcore.download.DefaultDependencyManager;
+import com.tungsten.fclcore.download.DependencyManager;
+import com.tungsten.fclcore.download.LibraryAnalyzer;
+import com.tungsten.fclcore.download.UnsupportedInstallationException;
+import com.tungsten.fclcore.download.VersionMismatchException;
+import com.tungsten.fclcore.game.Version;
+import com.tungsten.fclcore.task.FileDownloadTask;
+import com.tungsten.fclcore.task.Task;
+import com.tungsten.fclcore.util.gson.JsonUtils;
+import com.tungsten.fclcore.util.io.FileUtils;
+import com.tungsten.fclcore.util.versioning.VersionNumber;
+
+import java.io.IOException;
+import java.nio.file.FileSystem;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Optional;
+
+public final class ForgeInstallTask extends Task {
+
+ private final DefaultDependencyManager dependencyManager;
+ private final Version version;
+ private Path installer;
+ private final ForgeRemoteVersion remote;
+ private FileDownloadTask dependent;
+ private Task dependency;
+
+ public ForgeInstallTask(DefaultDependencyManager dependencyManager, Version version, ForgeRemoteVersion remoteVersion) {
+ this.dependencyManager = dependencyManager;
+ this.version = version;
+ this.remote = remoteVersion;
+ setSignificance(TaskSignificance.MODERATE);
+ }
+
+ @Override
+ public boolean doPreExecute() {
+ return true;
+ }
+
+ @Override
+ public void preExecute() throws Exception {
+ installer = Files.createTempFile("forge-installer", ".jar");
+
+ dependent = new FileDownloadTask(
+ dependencyManager.getDownloadProvider().injectURLsWithCandidates(remote.getUrls()),
+ installer.toFile(), null);
+ dependent.setCacheRepository(dependencyManager.getCacheRepository());
+ dependent.setCaching(true);
+ dependent.addIntegrityCheckHandler(FileDownloadTask.ZIP_INTEGRITY_CHECK_HANDLER);
+ }
+
+ @Override
+ public boolean doPostExecute() {
+ return true;
+ }
+
+ @Override
+ public void postExecute() throws Exception {
+ Files.deleteIfExists(installer);
+ setResult(dependency.getResult());
+ }
+
+ @Override
+ public Collection> getDependents() {
+ return Collections.singleton(dependent);
+ }
+
+ @Override
+ public Collection> getDependencies() {
+ return Collections.singleton(dependency);
+ }
+
+ @Override
+ public void execute() throws IOException, VersionMismatchException, UnsupportedInstallationException {
+ String originalMainClass = version.resolve(dependencyManager.getGameRepository()).getMainClass();
+ if (VersionNumber.VERSION_COMPARATOR.compare("1.13", remote.getGameVersion()) <= 0) {
+ // Forge 1.13 is not compatible with fabric.
+ if (!LibraryAnalyzer.VANILLA_MAIN.equals(originalMainClass)
+ && !LibraryAnalyzer.MOD_LAUNCHER_MAIN.equals(originalMainClass)
+ && !LibraryAnalyzer.LAUNCH_WRAPPER_MAIN.equals(originalMainClass)
+ && !LibraryAnalyzer.BOOTSTRAP_LAUNCHER_MAIN.equals(originalMainClass))
+ throw new UnsupportedInstallationException(UNSUPPORTED_LAUNCH_WRAPPER);
+ } else {
+ // Forge 1.12 and older versions is compatible with vanilla and launchwrapper.
+ // if (!"net.minecraft.client.main.Main".equals(originalMainClass) && !"net.minecraft.launchwrapper.Launch".equals(originalMainClass))
+ // throw new OptiFineInstallTask.UnsupportedOptiFineInstallationException();
+ }
+
+
+ if (detectForgeInstallerType(dependencyManager, version, installer))
+ dependency = new ForgeNewInstallTask(dependencyManager, version, remote.getSelfVersion(), installer);
+ else
+ dependency = new ForgeOldInstallTask(dependencyManager, version, remote.getSelfVersion(), installer);
+ }
+
+ /**
+ * Detect Forge installer type.
+ *
+ * @param dependencyManager game repository
+ * @param version version.json
+ * @param installer the Forge installer, either the new or old one.
+ * @return true for new, false for old
+ * @throws IOException if unable to read compressed content of installer file, or installer file is corrupted, or the installer is not the one we want.
+ * @throws VersionMismatchException if required game version of installer does not match the actual one.
+ */
+ public static boolean detectForgeInstallerType(DependencyManager dependencyManager, Version version, Path installer) throws IOException, VersionMismatchException {
+ Optional gameVersion = dependencyManager.getGameRepository().getGameVersion(version);
+ if (!gameVersion.isPresent()) throw new IOException();
+ try (FileSystem fs = CompressingUtils.createReadOnlyZipFileSystem(installer)) {
+ String installProfileText = FileUtils.readText(fs.getPath("install_profile.json"));
+ Map, ?> installProfile = JsonUtils.fromNonNullJson(installProfileText, Map.class);
+ if (installProfile.containsKey("spec")) {
+ ForgeNewInstallProfile profile = JsonUtils.fromNonNullJson(installProfileText, ForgeNewInstallProfile.class);
+ if (!gameVersion.get().equals(profile.getMinecraft()))
+ throw new VersionMismatchException(profile.getMinecraft(), gameVersion.get());
+ return true;
+ } else if (installProfile.containsKey("install") && installProfile.containsKey("versionInfo")) {
+ ForgeInstallProfile profile = JsonUtils.fromNonNullJson(installProfileText, ForgeInstallProfile.class);
+ if (!gameVersion.get().equals(profile.getInstall().getMinecraft()))
+ throw new VersionMismatchException(profile.getInstall().getMinecraft(), gameVersion.get());
+ return false;
+ } else {
+ throw new IOException();
+ }
+ }
+ }
+
+ /**
+ * Install Forge library from existing local file.
+ * This method will try to identify this installer whether it is in old or new format.
+ *
+ * @param dependencyManager game repository
+ * @param version version.json
+ * @param installer the Forge installer, either the new or old one.
+ * @return the task to install library
+ * @throws IOException if unable to read compressed content of installer file, or installer file is corrupted, or the installer is not the one we want.
+ * @throws VersionMismatchException if required game version of installer does not match the actual one.
+ */
+ public static Task install(DefaultDependencyManager dependencyManager, Version version, Path installer) throws IOException, VersionMismatchException {
+ Optional gameVersion = dependencyManager.getGameRepository().getGameVersion(version);
+ if (!gameVersion.isPresent()) throw new IOException();
+ try (FileSystem fs = CompressingUtils.createReadOnlyZipFileSystem(installer)) {
+ String installProfileText = FileUtils.readText(fs.getPath("install_profile.json"));
+ Map, ?> installProfile = JsonUtils.fromNonNullJson(installProfileText, Map.class);
+ if (installProfile.containsKey("spec")) {
+ ForgeNewInstallProfile profile = JsonUtils.fromNonNullJson(installProfileText, ForgeNewInstallProfile.class);
+ if (!gameVersion.get().equals(profile.getMinecraft()))
+ throw new VersionMismatchException(profile.getMinecraft(), gameVersion.get());
+ return new ForgeNewInstallTask(dependencyManager, version, modifyVersion(gameVersion.get(), profile.getVersion()), installer);
+ } else if (installProfile.containsKey("install") && installProfile.containsKey("versionInfo")) {
+ ForgeInstallProfile profile = JsonUtils.fromNonNullJson(installProfileText, ForgeInstallProfile.class);
+ if (!gameVersion.get().equals(profile.getInstall().getMinecraft()))
+ throw new VersionMismatchException(profile.getInstall().getMinecraft(), gameVersion.get());
+ return new ForgeOldInstallTask(dependencyManager, version, modifyVersion(gameVersion.get(), profile.getInstall().getPath().getVersion().replaceAll("(?i)forge", "")), installer);
+ } else {
+ throw new IOException();
+ }
+ }
+ }
+
+ private static String modifyVersion(String gameVersion, String version) {
+ return removeSuffix(removePrefix(removeSuffix(removePrefix(version.replace(gameVersion, "").trim(), "-"), "-"), "_"), "_");
+ }
+}
diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/download/forge/ForgeNewInstallProfile.java b/FCLCore/src/main/java/com/tungsten/fclcore/download/forge/ForgeNewInstallProfile.java
new file mode 100644
index 000000000..77fa4fa5a
--- /dev/null
+++ b/FCLCore/src/main/java/com/tungsten/fclcore/download/forge/ForgeNewInstallProfile.java
@@ -0,0 +1,197 @@
+package com.tungsten.fclcore.download.forge;
+
+import com.google.gson.JsonParseException;
+import com.tungsten.fclcore.game.Artifact;
+import com.tungsten.fclcore.game.Library;
+import com.tungsten.fclcore.util.gson.TolerableValidationException;
+import com.tungsten.fclcore.util.gson.Validation;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+public class ForgeNewInstallProfile implements Validation {
+
+ private final int spec;
+ private final String minecraft;
+ private final String json;
+ private final String version;
+ private final Artifact path;
+ private final List